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 | 1.实体类映射到视图 |
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>接口的配置文件中的写法
1 2 3 4 5 6 7 | public class BookEntityConfig : IEntityTypeConfiguration<Book> { public void Configure(EntityTypeBuilder<Book> builder) { builder. Ignore (m => m.Name2); } } |
3.列名
1 | modelBuilder.Entity<Book>().Property(m=>m.Id).HasColumnName( "Boo_Id" ); |
4.列数据类型
1 | modelBuilder.Entity<Book>().Property(m=>m.Title).HasColumnType( "varchar(200)" ); |
5.主键
1 | modelBuilder.Entity<Book>().HasKey(m => m.Title); |
6.索引
1 2 3 | modelBuilder.Entity<Book>().HasIndex(m => m.Title);//单个字段索引 //复合索引 modelBuilder.Entity<Book>().HasIndex(m => new { m.Title, m.AuthorName }); |
注意:默认情况下,EF Core 中定义的索引不是唯一索引。唯一索引:IsUnique(),聚集索引:IsClustered()
1 | modelBuilder.Entity<Blog>().HasIndex(b => b.Url).IsUnique(); |
同一属性连写方法:
1 2 | builder.Property(e => e.AuthorName).HasMaxLength(20).HasColumnName( "AName" ).IsRequired(); builder.Property(e => e.Price).HasColumnName( "BookPrice" ).HasDefaultValue(9.9); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!