EF 6.1 Fluent API:忽略基类的属性

时间:2014-05-28 05:18:14

标签: c# ef-code-first

我有一个所有实体的基类:

public class BaseClass
{
    public int SomeProperty {get; set;}
}

public class SomeEntity : BaseClass
{
    ...
}

我想在某些情况下忽略此属性。我可以在OnModelCreating方法中做这样的事情:

public class MyContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Properties<int>()
                    .Where(p => p.Name == "SomeProperty")
                    .Ignore();
}

3 个答案:

答案 0 :(得分:3)

你可以尝试:

modelBuilder.Entity<SomeEntity>().Ignore(p => p.SomeProperty);

这会导致SomeProperty无法映射到SomeEntity

编辑:如果永远不会将此属性映射到数据库,则可以在NotMapped中添加BaseClass注释:

public class BaseClass
{
    [NotMapped]
    public int SomeProperty {get; set;}
}

这与在所有扩展类中忽略此属性相同。

答案 1 :(得分:1)

这是一个迟到的条目 - 但是如果它有用......

最近我遇到过类似的要求,我接受了这个: -

public class MyContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder mb)
    {
        mb.Types<EntityBase>()
          .Configure(config => config.Ignore(x => x.SomeBaseClassPropertyToIgnore));
    }
}

这会将给定的配置应用于从EntityBase继承的所有实体类型。可以使用相同的技术基于它们实现的接口来配置实体类型(无论如何可能是更好的方法)。

优点是: -

  • 无需为多个具体实体编写和维护相同的配置代码。
  • 不需要[NotMapped]属性,这种属性不太灵活,并且可能会添加可能不需要的依赖项。

请注意,如有必要,可以进一步过滤目标类型: -

protected override void OnModelCreating(DbModelBuilder mb)
{
    mb.Types<EntityBase>().Where(t => t != typeof(SpecialExceptionEntity)).Configure(...);
}

参考文献: -

https://msdn.microsoft.com/en-us/library/dn235653(v=vs.113).aspx

https://msdn.microsoft.com/en-us/library/dn323206(v=vs.113).aspx

答案 2 :(得分:1)

您可以覆盖它吗?

public class SomeEntity : BaseClass
{    
    [NotMapped]
    public override int SomeProperty { get; set; }
    ...
}