告诉EF6不要坚持基类,但设置FluentAPI禁令

时间:2016-08-20 00:31:05

标签: c# asp.net asp.net-mvc entity-framework ef-fluent-api

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

1 个答案:

答案 0 :(得分:2)

正常的实体配置是这样的:

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继承的每种类型执行此操作。