今天正式开始学习ef core,将学习经验分享到这里,供以后浏览复习使用。本文从新建一个项目开始介绍ef core的使用方法,主要讲解需要nuget哪些包,已经如何引用,及使用code first完成数据库的创建。首次创建将自动创建数据库,数据库名称根据数据库连接里面的名称指定。
新建一个Asp.net core web应用项目,具体步骤这里不再介绍。
需要引入Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Tools两个包,SqlServer是核心实现类,Tools主要用于生成数据库表。
引入方法如下:在Vs中打开工具》NuGet包管理器》程序包管理控制台菜单,打开程序包管理器控制台。
分别输入如下命令,完成依赖包的引入:
1 2 | PM> Install-Package Microsoft.EntityFrameworkCore.SqlServer PM> Install-Package Microsoft.EntityFrameworkCore.Tools |
本文创建一个Advanced11数据库,数据库需要自己通过数据库客户端创建,然后通过代码创建Books及Persons两个数据表,主要完成步骤包含三步,第一步写Books及Persons实体类、第二步通过Fluent Api进行实体配置,主要配置实体类如何映射到数据表,第三步创建DbContext数据库上下文。所有代码在Models文件夹下面创建。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class Book { public long Id { get ; set ; } public string Title { get ; set ; } public DateTime PubTime { get ; set ; } public double Price { get ; set ; } public string AuthorName { get ; set ; } } public class Person { public long Id { get ; set ; } public string Name { get ; set ; } public int Age { get ; set ; } public string ? Sex { get ; set ; } } |
实体配置类代码如下实现IEntityTypeConfiguration<T>接口,并实现Configure方法,具体代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public class BookConfig : IEntityTypeConfiguration<Book> { /// <summary> /// 约定大于配置 /// </summary> /// <param name="builder"></param> public void Configure(EntityTypeBuilder<Book> builder) { builder.ToTable( "Books" ); //映射数据库到表名 builder.Property(x => x.Title).HasMaxLength(200).IsRequired(); //长度 } } public class PersonConfig : IEntityTypeConfiguration<Person> { public void Configure(EntityTypeBuilder<Person> builder) { builder.ToTable( "Persons" ); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | public class TestDbContext:DbContext { //映射到数据库表名 public DbSet<Book> Books { get ; set ; } public DbSet<Person> Persons { get ; set ; } public DbSet<Dog> Dogs { get ; set ; } /// <summary> /// 重写OnConfiguring实现数据库连接 /// </summary> /// <param name="optionsBuilder"></param> protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { base .OnConfiguring(optionsBuilder); optionsBuilder.UseSqlServer( "Data Source=.;Initial Catalog=Advanced11;Persist Security Info=True;User ID=sa;Password=*******" ); } /// <summary> /// 加载第二步的Fluent Api实体配置 /// </summary> /// <param name="modelBuilder"></param> protected override void OnModelCreating(ModelBuilder modelBuilder) { base .OnModelCreating(modelBuilder); //从指定程序集里面添加实体配置类 modelBuilder.ApplyConfigurationsFromAssembly( this .GetType().Assembly); } } |
至此代码已经完成,截止目前项目结构如下:
在程序包管理器控制台,Add-Migration、Update-database两个命令即可,如果想修改数据表的相关信息,比如增加、修改、删除列,直接操作上面的实体类或者配置类即可,每次修改完成后都需要执行这两个命令。Add-Migration命令格式如下:Add-Migration +修改表描述名称
具体命令如下:
1 2 | PM> Add-Migration init PM> Update-database |
init为定义名称。
至此数据库创建完成,如下图:
附:Fluent Api常用配置
1 2 3 4 5 6 7 8 9 10 11 12 13 | public void Configure(EntityTypeBuilder<Book> builder) { builder.ToTable( "Books" ); //映射数据库到表名 builder.HasKey(x => x.Id); //主键 builder.Property(x => x.Title).HasMaxLength( 200 ).IsRequired(); //长度 builder.Ignore(x=>x.PubTime); //忽略创建到数据库 builder.Property(x=>x.Title).HasColumnName( "STitle" ); //指定数据库列名 builder.Property(x => x.Title).HasColumnType( "varchar(200)" ); //指定数据库列类型 builder.Property(x => x.Title).HasDefaultValue( "测试文章" ); //设置默认值 builder.HasIndex(x => x.Id); //设置索引 builder.HasIndex(x => new { x.Id, x.AuthorName }); //设置符合索引 builder.HasIndex(x => x.Id).IsUnique(); //唯一索引 } |
- EF Core 实战教程(八)一对多关系配置(1145)
- EF Core 实战教程(四)EF Core如何设置主键(942)
- EF Core 实战教程(六)如何查看EF Core生成的Sql语句(921)
- EF Core 实战教程(七)通过读取appsetting.json数据库链接字符串链接数据库(852)
- EF Core 实战教程(三)Fluent Api配置详解(610)
- EF Core 实战教程(一)配置环境及使用code first 创建数据库(601)
- EF Core 实战教程(五)Migrations深入研究及使用详解(536)
- EF Core 实战教程(二)实现基本的查询、增加、修改、删除功能(524)
- 解决Asp.net Core Razor页面调试时无法实时更新(521)
- EF Core实现充血模型(489)
- 2025年3月 (1)
- 2024年6月 (2)
- 2024年5月 (2)
- 2024年4月 (4)
- 2024年3月 (30)
- 2024年1月 (4)
- 2023年12月 (2)
- 2023年11月 (4)
- 2023年10月 (4)
- 2023年9月 (6)
- 2023年3月 (2)
- 2023年2月 (1)
- 2023年1月 (1)
- 2022年12月 (1)
- 2022年9月 (21)
- 2022年8月 (10)
- 2022年7月 (3)
- 2022年4月 (1)
- 2022年3月 (13)
- 2021年8月 (1)
- 2021年3月 (1)
- 2020年12月 (42)
- 2020年11月 (7)
- 2020年10月 (5)
- 2020年8月 (1)
- 2020年6月 (1)
- 2020年3月 (2)
- 2019年12月 (8)
- 2019年11月 (3)
- 2019年9月 (1)
- 2019年4月 (1)
- 2019年3月 (6)
- 2019年2月 (1)
- 2018年7月 (7)
- 1.asp.net mvc内微信pc端、H5、JsApi支付方式总结(5736)
- 2.Windows 10休眠文件更改存储位置(3259)
- 3.各大搜索网站网站收录提交入口地址(3234)
- 4.ECharts仪表盘实例及参数使用详解(3131)
- 5.windows 10安装myeclipse 10破解补丁cracker.jar、run.bat闪退解决办法(3052)
- 6.HTML5 WebSocket与C#建立Socket连接实现代码(2925)
- 7.华为鸿蒙系统清除微信浏览器缓存方法(2841)
- 8.CERT_HAS_EXPIRED错误如何解决(2371)
- 9.Js异步async、await关键字详细介绍(lambda表达式中使用async和await关键字)(2245)
- 10.HBuilder编辑器格式化代码(2157)