学海无涯

导航

EF Core 代码优先使用Fluent API 配置

EF Core 除了用数据注释 Data Annotation 对实体类进行配置之外,还提供了Fluent API 的方式 对实体类进行配置。

Fluent API 优势:

1. 能够更好的进行职责分离。实体类只负责抽象描述,不涉及和数据库相关的细节,所有数据库相关的细节都放到配置类中,这样我们能更方便的进行大型项目的管理。

2. 功能更强大。Fluent API 包含了 Data Annotation 的全部功能。

两种实体类的配置方案:

1. 混合方案:优先使用Data Annotation,当部分功能无法实现时,则用 Fluent API

2.单一方案:只用 Fluent API (推荐)

Fluent API 基本用法:

 1.实体类映射到视图
 modelBuilder.Entity<Book>().ToView("blogsView");

  2.忽略某个属性映射

2.1 在上下文DbContext方法中的写法

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
//加载当前程序集中所有实现了IEntityTypeConfiguration<T> 接口的类
modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly); //仅当创建实现了EntityTypeConfiguration<Book>类,才需要
modelBuilder.Entity<Book>().Ignore(m=>m.Name2);
}

  2.2 在实现了IEntityTypeConfiguration<Book>接口的配置文件中的写法

 public class BookEntityConfig : IEntityTypeConfiguration<Book>
    {
        public void Configure(EntityTypeBuilder<Book> builder)
        {
          builder.Ignore(m => m.Name2);
        }
    }

  3.列名

 modelBuilder.Entity<Book>().Property(m=>m.Id).HasColumnName("Boo_Id");

  4.列数据类型

modelBuilder.Entity<Book>().Property(m=>m.Title).HasColumnType("varchar(200)");

  5.主键

 modelBuilder.Entity<Book>().HasKey(m => m.Title);

  6.索引

 modelBuilder.Entity<Book>().HasIndex(m => m.Title);//单个字段索引
//复合索引
 modelBuilder.Entity<Book>().HasIndex(m => new { m.Title, m.AuthorName });

 注意:默认情况下,EF Core 中定义的索引不是唯一索引。唯一索引:IsUnique(),聚集索引:IsClustered()

 modelBuilder.Entity<Blog>().HasIndex(b => b.Url).IsUnique();

   同一属性连写方法:

builder.Property(e => e.AuthorName).HasMaxLength(20).HasColumnName("AName").IsRequired();
builder.Property(e => e.Price).HasColumnName("BookPrice").HasDefaultValue(9.9);

  

posted on 2022-09-29 07:40  宁静致远.  阅读(279)  评论(0编辑  收藏  举报