上篇我们介绍了怎么通过已有的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

最新文章

  1. 【WPF系列】基础学习-WPF架构概览
  2. 如何捕获和分析 JavaScript Error
  3. [CF #236 (Div. 2) E] Strictly Positive Matrix(强联通分量)
  4. Nightmare
  5. linux下删除所有.svn目录
  6. 12.1 文档相关 Webbrowser 该文档已被修改,是否保存修改结果
  7. jsp HTTP Status 405 - HTTP method GET is not supported by this URL
  8. APP切图那些事儿-Android ios
  9. JavaScript 使用
  10. Mysql 列转行group_concat函数,与行转列
  11. Java学习笔记--Swing
  12. C++学习之路—多态性与虚函数(一)利用虚函数实现动态多态性
  13. 使用webview加载html图片、表单超屏幕问题
  14. Core Java 谈谈 ThreadPoolExecutor
  15. Java眼中的XML文件写入
  16. Dshell----开源攻击分析框架
  17. Taro开发小程序移动地图固定中间获取地址
  18. mysql中主外键关系
  19. MySQL事务笔记
  20. springboot测试

热门文章

  1. 算法——K 个一组翻转链表
  2. NMO not setuid-root (Unix-only)
  3. docker 添加Portainer容器图形化管理工具
  4. JavaSE17-File&amp;递归&amp;字节流
  5. svn add . 报错,不能add全部,因为有一些文件已经在版本库中了
  6. SpringBoot从入门到精通教程(五)
  7. k8s之深入解剖Pod(二)
  8. Nginx-rtmp+ FFmpeg +Docker + vue.js 直播系统搭建
  9. JS中Generator的学习小记
  10. python初学者-代码规范