У меня есть базовый класс для всех объектов:
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();
}
?
Вы можете попробовать:
modelBuilder.Entity<SomeEntity>().Ignore(p => p.SomeProperty);
Это приведет к тому, что SomeProperty
не будет отображаться на SomeEntity
.
EDIT: Если это свойство никогда не должно быть сопоставлено с базой данных, вы можете добавить аннотацию NotMapped
в свой BaseClass
:
public class BaseClass
{
[NotMapped]
public int SomeProperty {get; set;}
}
Это будет таким же, как игнорирование этого свойства во всех расширяющих классах.
Поздняя запись здесь - но в случае, если это полезно...
Недавно столкнувшись с подобными требованиями, я пошел с этим: -
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(...);
}
Refs: -
https://msdn.microsoft.com/en-us/library/dn235653(v=vs.113).aspx
https://msdn.microsoft.com/en-us/library/dn323206(v=vs.113).aspx