上篇我们介绍了怎么通过已有的SQLServer表来创建实体类,本篇我们改用Code First的方式,由C#代码书写的实体类来生成SQLServer表。并且通过简单的Console APP往SQLServer表写入数据。
首先我们先创建3个空的Projects,其中EfCodeFirst是作为启动项的Console程序(.NET Core 3.1)。EfCodeFirst通过Add Project Reference引用DataAccess工程(.NET Standard 2.0)。DataAccess将会包含DbContext对象,作为数据库的实际访问接口。同时DataAccess还会Add Project Reference引用Entities工程(.NET Standard 2.0)。Entities工程顾名思义,所有SQLServer表的映射实体类会写到这里。

接着我们通过NuGet给各个Project添加EntityFrameworkCore的引用,其中DataAccess需要EntityFrameworkCore.Tools以及EntityFrameworkCore.SqlServer,启动项EfCodeFirst需要EntityFramework.Design。

同时还要把CodeFirst所需的代码给补上,在Entities工程中我们添加TodoItem类:

namespace Entities
{
public class TodoItem
{
public long Id { get; set; }
public string Name { get; set; }
public bool IsComplete { get; set; }
}
}

在DataAccess工程中我们添加TodoContext对象,TodoContext继承自DbContext,同时还引用TodoItem类。实际我们也正是通过TodoContext类来实现TodoItem对象在SQLServer中的增删查改。注意这里我们通过OnConfiguring方法来指定SQLServer的Connection String。

namespace DataAccess
{
public class TodoContext : DbContext
{
public DbSet<TodoItem> TodoItems { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlServer(@"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=CodeFirstDB;Integrated Security=True;");
}
}

接下来我们就要通过在Package Manager Console窗口通过Add-Migration命令来创建SQLServer表了。注意Default project要选择DataAccess,否则Migrations相关文件会生成到别的工程。

InitDatabase是我给Migrations脚本指定的名字,在DataAccess工程中,会加上时间前缀生成对应的Migrations类,以如下形式呈现:

此时仍没有创建SQLServer表,我们需要在Package Manager Console提示"Build succeeded."后。通过Update-Database命令来把修改应用到SQLServer中。

至此我们就可以使用TodoContext来访问SQLServer中的TodoItems表了,在EfCodeFirst工程的Main函数里添加如下代码,每次Main函数启动时查询TodoItems表的记录条数,然后新增一条记录。

        static void Main(string[] args)
{
Console.WriteLine("Hello World!"); using (var dbContext = new TodoContext())
{
var count = dbContext.TodoItems.Count();
var item = new TodoItem { Name = $"test{++count}" };
dbContext.Add(item);
dbContext.SaveChanges();
}
}

GitHub:

https://github.com/manupstairs/EntityFrameworkCoreSamples/tree/main/CodeFirstSample

.NET Core学习笔记(9)——Entity Framework Core之Code First的更多相关文章

  1. ASP.NET Core 1.0、ASP.NET MVC Core 1.0和Entity Framework Core 1.0

    ASP.NET 5.0 将改名为 ASP.NET Core 1.0 ASP.NET MVC 6  将改名为 ASP.NET MVC Core 1.0 Entity Framework 7.0    将 ...

  2. [转帖]2016年时的新闻:ASP.NET Core 1.0、ASP.NET MVC Core 1.0和Entity Framework Core 1.0

    ASP.NET Core 1.0.ASP.NET MVC Core 1.0和Entity Framework Core 1.0 http://www.cnblogs.com/webapi/p/5673 ...

  3. Professional C# 6 and .NET Core 1.0 - 38 Entity Framework Core

    本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - 38 Entity Framework ...

  4. ASP.NET Core 1.0: Using Entity Framework Core

    伴随着ASP.NET Core 1.0发布的还有Entity Framework Core 1.0; 官方文档链接:https://docs.efproject.net/en/latest/platf ...

  5. [转]ASP.NET Core 1.0: Using Entity Framework Core 1.0 - Transaction

    本文转自:http://blog.csdn.net/alvachien/article/details/51576961 跟Entity Framework之前的版本不同,Class DbContex ...

  6. ASP.NET Core 1.0: Using Entity Framework Core 1.0 - Transaction

    跟Entity Framework之前的版本不同,Class DbContext不再有AcceptAllChanges()方法. 使用Transaction需要使用DbContext中的Databas ...

  7. 请问在 .NET Core 中如何让 Entity Framework Core 在日志中记录由 LINQ 生成的SQL语句?

    using dotNET.Core; using Microsoft.Extensions.Logging; using System; using System.Collections.Generi ...

  8. Entity Framework Core 练习参考

    项目地址:https://gitee.com/dhclly/IceDog.EFCore 项目介绍 对 Microsoft EntityFramework Core 框架的练习测试 参考文档教程 官方文 ...

  9. 全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)

    在开发涉及到数据库的程序时,常会遇到一开始设计的结构不能满足需求需要再添加新字段或新表的情况,这时就需要进行数据库迁移. 实现数据库迁移有很多种办法,从手动管理各个版本的ddl脚本,到实现自己的mig ...

  10. .NET CORE学习笔记系列(2)——依赖注入[8]: .NET Core DI框架[服务消费]

    原文:https://www.cnblogs.com/artech/p/net-core-di-08.html 包含服务注册信息的IServiceCollection对象最终被用来创建作为DI容器的I ...

随机推荐

  1. 超详细!使用 LVS 实现负载均衡原理及安装配置详解---转

    负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学 ...

  2. Vue:对axios进行简单的二次封装

    主要做3点: 1.配置一个请求地址前缀 2.请求拦截(在请求发出去之前拦截),给所有的请求都带上 token 3.拦截响应,遇到 token 不合法则报错 // 对 axios 的二次封装 impor ...

  3. 使用tkinter打造一个小说下载器,想看什么小说,就下什么

    前言 今天教大家用户Python GUI编程--tkinter 打造一个小说下载器,想看什么小说,就下载什么小说 先看下效果图 Tkinter 是使用 python 进行窗口视窗设计的模块.Tkint ...

  4. java web简单的增删改查

    1.主要的文件,运行结果,运行界面,数据库创建的表等图片. 所要创建的文件和要导入的包: 主页面: 显示界面: 数据库的信息: 删除.查找.修改就不一 一列出来,自己可以运行看看.哈哈 2.接下来我将 ...

  5. mysql: SOURCE error 2?

    mysql: SOURCE error 2? mysql -uroot -p ****** # 路径输入错误,会抛出这个异常 mysql> source /var/lib/ambari-serv ...

  6. HBase按照行键范围删除数据

    #!/bin/bash #TOOL_PATH=$(cd "$(dirname "$0")"; pwd) #TOOL_PATH_TMP=$(cd "$( ...

  7. 2020-2021-1 20209307 《Linux内核原理与分析》第二周作业

    1.寻址方式和常用汇编指令 寄存器寻址:movl %eax,%edx  相当于edx=eax 立即寻址:movl $0x123,%edx   相当于edx=0x123 直接寻址:movl 0x123, ...

  8. get \post 接口代码及断言编写

    post 请求接口 import requests import json url_path = "http://www.baidu.com" data = {"user ...

  9. [日常摸鱼]bzoj2875[NOI2012]随机数生成器-矩阵快速幂

    好裸的矩阵快速幂-然而我一开始居然构造不出矩阵- 平常两个的情况都是拿相邻两项放在矩阵里拿去递推的-然后我就一直构造不出来-其实把矩阵下面弄成1就好了啊orz #include<cstdio&g ...

  10. Python读写EXCEL文件常用方法大全

    前言 python读写excel的方式有很多,不同的模块在读写的讲法上稍有区别,这里我主要介绍几个常用的方式. 用xlrd和xlwt进行excel读写: 用openpyxl进行excel读写: 用pa ...