簡體   English   中英

EF 6.1 Fluent API:忽略基類的屬性

[英]EF 6.1 Fluent API: Ignore property of the base class

我對所有實體都有一個基類:

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

編輯:如果此屬性永遠不應映射到數據庫,則可以在BaseClass添加NotMapped批注:

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繼承的所有實體類型。 可以使用相同的技術基於它們實現的接口來配置實體類型(無論如何可能是一種更好的方法)。

優點是:

  • 無需為多個具體實體編寫和維護相同的配置代碼。
  • 不需要[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

您可以覆蓋它嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM