EFCore 基于Code First开发的配置

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定义的属性名就是数据库的表名,我们看到每个属性名的后面都加了一个s,这是EFCORE的默认的表名命名约定,如果你去掉后面的s,并注释OnModelCreating函数,然后用add-migration FirstMigration添加迁移的时候编译会失败,无法添加迁移,就是因为这个表名违反了EFCORE的默认命名约定。如果我们想自定义自己喜欢的表名,就按照OnModelCreating函数里的方法自定义表名。

5、添加迁移。在VS的工具栏上找到:视图=》其他窗口=》程序包管理控制台,在控制台输入以下命令:

add-migration firstmigration

这个命名不区分大小写。执行成功后系统会自动在项目的根目录下生成一个文件夹Migrations,这个文件夹里的文件记录每次迁移的内容,现在这个文件夹里应该以下有2个文件:

6、迁移到数据库。在程序包管理控制台输入命令:

update-database

这个命令把迁移的内容更新到数据库中。执行成功后,登录到数据库中就可以看到新创建的数据库和表。

关于这个命令还有一个用法,就是如果你只想更新某一个迁移到数据库,而不是把所有的迁移都更新到数据库(这个命令会把所有还未更新的迁移都更新到数据库),可以在这个命令的基础上加一个参数:

update-database -migration SecondMigration

执行这个命令可能会报一个错:证书链是由不受信任的颁发机构颁发的。这是因为你的系统的SSL证书不被数据库服务器信任,解决这个问题的方法是在数据库连接字符串上加上一个配置:

TrustServerCertificate=true;

至此Code First的配置已经完成了,关于更加复杂的配置请参考EFCORE 官方文档

你可能感兴趣的:(C#,EFCORE,Code,First)