上篇我们介绍了怎么通过已有的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. oracle 时间段查询

    <select id="selectByRzrq" resultMap="BaseResultMap" parameterType="java. ...

  2. eclipse提示JVM版本太低

    解决方案:去eclipse的安装路径找到eclipse.ini文件,然后在头部指定JVM的版本(第一第二行) -vm C:/Program Files/Java/jdk-11.0.9/bin -sta ...

  3. docker 批量删除已经停止的容器

    长期操作导致大量的容器堆积,如何对这些没有用的容器进行批量删除: 命令如下 : Docker rm `docker ps -a |awk '{print $1}' | grep [0-9a-z]`

  4. Graphql Tutorials(Episode 02)

    1.前言 我们在上篇已经了解Graphql的使命以及Graphql的概况,接下来,我们跑起来另外一个Helloworld来开启继续学习. 2.Helloworld(使用Graphql 原生API) 这 ...

  5. vue 分支结构

    分支循环结构 分支循环结构指令 v-if v-else v-else-if v-show v-if 指令 可以直接在元素中添加指令,添加判断的值 最后运行可以得到结果是:  v-show v-show ...

  6. springmvc表单标签库的使用

    springmvc中可以使用表单标签库,支持数据绑定,用来将用户输入绑定到领域模型. 例子来源<Servlet.JSP和SpringMVC学习指南> 项目代码 关键代码及说明 bean对象 ...

  7. go-slice实现的使用和基本原理

    目录 摘要 Slice数据结构 使用make创建Slice 使用数组创建Slice Slice 扩容 Slice Copy 特殊切片 总结 参考 你的鼓励也是我创作的动力 Posted by 微博@Y ...

  8. CORS(跨域资源共享)笔记

    0.前言 CORS(Cross-Origin Resource Sharing)是一个用于处理跨域问题的W3C标准,本文将介绍什么是跨域,引起跨域的同源策略,什么是CORS,CORS的工作过程,请求方 ...

  9. Java基础进阶:APi使用,Math,Arrarys,Objects工具类,自动拆装箱,字符串与基本数据类型互转,递归算法源码,冒泡排序源码实现,快排实现源码,附重难点,代码实现源码,课堂笔记,课后扩展及答案

    要点摘要 Math: 类中么有构造方法,内部方法是静态的,可以直接类名.方式调用 常用: Math.abs(int a):返回参数绝对值 Math.ceil(double a):返回大于或等于参数的最 ...

  10. [.NET] - OleDb读取CSV文件:使用指定的分隔符号

    今天在用OleDb方式读取一个CSV文件的时候,发现得到的文本不是通常用逗号隔开的.而是用Tab制表符来隔开的. OrderID OrderName 1 1 2 2 3 3 然后去MSND查询了了下发 ...