今天正式开始学习ef core,将学习经验分享到这里,供以后浏览复习使用。本文从新建一个项目开始介绍ef core的使用方法,主要讲解需要nuget哪些包,已经如何引用,及使用code first完成数据库的创建。首次创建将自动创建数据库,数据库名称根据数据库连接里面的名称指定。
新建一个Asp.net core web应用项目,具体步骤这里不再介绍。
需要引入Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Tools两个包,SqlServer是核心实现类,Tools主要用于生成数据库表。
引入方法如下:在Vs中打开工具》NuGet包管理器》程序包管理控制台菜单,打开程序包管理器控制台。
分别输入如下命令,完成依赖包的引入:
PM> Install-Package Microsoft.EntityFrameworkCore.SqlServer PM> Install-Package Microsoft.EntityFrameworkCore.Tools
本文创建一个Advanced11数据库,数据库需要自己通过数据库客户端创建,然后通过代码创建Books及Persons两个数据表,主要完成步骤包含三步,第一步写Books及Persons实体类、第二步通过Fluent Api进行实体配置,主要配置实体类如何映射到数据表,第三步创建DbContext数据库上下文。所有代码在Models文件夹下面创建。
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方法,具体代码如下:
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"); } }
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 +修改表描述名称
具体命令如下:
PM> Add-Migration init PM> Update-database
init为定义名称。
至此数据库创建完成,如下图:
附:Fluent Api常用配置
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 实战教程(八)一对多关系配置(1183)
- EF Core 实战教程(四)EF Core如何设置主键(1019)
- EF Core 实战教程(六)如何查看EF Core生成的Sql语句(1004)
- EF Core 实战教程(七)通过读取appsetting.json数据库链接字符串链接数据库(918)
- EF Core 实战教程(三)Fluent Api配置详解(650)
- EF Core 实战教程(一)配置环境及使用code first 创建数据库(624)
- 解决Asp.net Core Razor页面调试时无法实时更新(562)
- EF Core 实战教程(五)Migrations深入研究及使用详解(560)
- EF Core 实战教程(二)实现基本的查询、增加、修改、删除功能(547)
- EF Core实现充血模型(513)
- 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支付方式总结(5806)
- 2.Windows 10休眠文件更改存储位置(3568)
- 3.各大搜索网站网站收录提交入口地址(3409)
- 4.windows 10安装myeclipse 10破解补丁cracker.jar、run.bat闪退解决办法(3313)
- 5.ECharts仪表盘实例及参数使用详解(3310)
- 6.HTML5 WebSocket与C#建立Socket连接实现代码(3098)
- 7.华为鸿蒙系统清除微信浏览器缓存方法(3030)
- 8.CERT_HAS_EXPIRED错误如何解决(2670)
- 9.Js异步async、await关键字详细介绍(lambda表达式中使用async和await关键字)(2468)
- 10.HBuilder编辑器格式化代码(2331)