我有一个所有实体的基类:
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();
}
答案 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继承的所有实体类型。可以使用相同的技术基于它们实现的接口来配置实体类型(无论如何可能是更好的方法)。
优点是: -
请注意,如有必要,可以进一步过滤目标类型: -
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; }
...
}