告诉EF6不要持久化基类,而是设置FluentAPI包含

本文关键字:设置 FluentAPI 包含 基类 EF6 持久化 告诉 | 更新日期: 2023-09-27 18:03:16

我有一个名为"Entity"的基类,我在其中放置了应该由每个实体(例如Id, CreateAt, UpdateAt)继承的标准字段。我更喜欢使用FluentAPI,因为据说它比注释更强大,而且它支持清晰易读的POCO类。是否有一种方法,我可以设置在流畅api的父实体类这些字段的属性,并有它继承,但也不生成一个表在数据库中的"实体"POCO类?

告诉EF6不要持久化基类,而是设置FluentAPI包含

一个正常的实体配置应该是这样的:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Planet>().HasKey(b => b.Id);
}

然而,正如您所注意到的,这也将把类型注册为模型的一部分。实体框架6虽然引入了DbModelBuilder.Types<T>方法,根据文档:

开始配置轻量级约定,该约定应用于模型中继承或实现泛型参数指定的类型的所有实体和复杂类型。这个方法不注册类型作为模型的一部分。

这意味着你可以这样配置你的基实体类:

modelBuilder.Types<Entity>().Configure(c =>
{
    c.HasKey(e => e.Id);
});

这使您不必为每个继承自Entity的类型做此操作。