EFCore版本:7.0.10
Visual Studio版本:2022
1、首先新建一个项目(无论是.net framework还是.net core都可以),在项目中添加EFCore的程序包:
2、新建一个文件夹Models,把表模型都放在这个文件夹里
3、新建表模型,这里我新建2张表:Post和Blog,以下是表的定义:
public class Blog
{
public int BlogId { get; set; }
[MaxLength(200)]
public string Name { get; set; }
public virtual List Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
[MaxLength(100)]
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public virtual Blog Blog { get; set; }
}
根据这个类创建出来的表中,EF会把BlogId和PostId作为表的主键,因为EF默认表的主键为Id或类名+Id。我们也可以用数据注释的方式显式为表指定主键,像下面这样:
[Key]
public int PostId { get; set; }
使用MaxLength可以为字段指定字符个数,如[MaxLength(100)]应用到数据库的字段定义就是nvarchar(100)。
这种定义字段的方式称为数据注释,需要引入命名空间:
using System.ComponentModel.DataAnnotations;
还有一种定义字段的方式是Fluent API,在继承自DbOontext类的OnModelCreating函数中定义字段,这种方式在这里就不做介绍了,想了解这种方式的同学可以自己查看EFCore的官方文档。
在这2个类的定义中,我们看到每个类的最后一行都使用了virtual关键字,这其实是定义外键的方式。Post表的BlogId是Blog表的外键。
4、接下来我们需要创建一个继承自DbContext的类,代码如下:
public class BloggingContext : DbContext
{
public DbSet Blogs { get; set; }
public DbSet Posts { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(数据库连接字符串);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity().ToTable("Blog");
modelBuilder.Entity().ToTable("Post");
base.OnModelCreating(modelBuilder);
}
数据库的名称就是类名除去Context,这个数据库的名称就是Blogging。
用DbSet
5、添加迁移。在VS的工具栏上找到:视图=》其他窗口=》程序包管理控制台,在控制台输入以下命令:
add-migration firstmigration
这个命名不区分大小写。执行成功后系统会自动在项目的根目录下生成一个文件夹Migrations,这个文件夹里的文件记录每次迁移的内容,现在这个文件夹里应该以下有2个文件:
6、迁移到数据库。在程序包管理控制台输入命令:
update-database
这个命令把迁移的内容更新到数据库中。执行成功后,登录到数据库中就可以看到新创建的数据库和表。
关于这个命令还有一个用法,就是如果你只想更新某一个迁移到数据库,而不是把所有的迁移都更新到数据库(这个命令会把所有还未更新的迁移都更新到数据库),可以在这个命令的基础上加一个参数:
update-database -migration SecondMigration
执行这个命令可能会报一个错:证书链是由不受信任的颁发机构颁发的。这是因为你的系统的SSL证书不被数据库服务器信任,解决这个问题的方法是在数据库连接字符串上加上一个配置:
TrustServerCertificate=true;
至此Code First的配置已经完成了,关于更加复杂的配置请参考EFCORE 官方文档