簡體   English   中英

實體框架代碼優先:如何忽略類

[英]Entity Framework code first: How to ignore classes

這與此處此處的問題類似,但這些問題都是陳舊且沒有好的答案。

假設我有以下課程:

class HairCutStyle { 
   public int ID { get; set; }
   public string Name { get; set; }
}

class CustomerHairCutPreference {
   public int ID { get; set; }
   public Customer Customer { get; set; }
   public HairCutStyle HairCutStyle { get; set; }
}

假設我的HairCutStyle數據存儲在另一個數據庫的表中(我是從Paul Mitchell自己獲得的)。 我想將HairCutStyle類用作POCO類 - 我將在代碼中使用它來表示剪發樣式,但我不需要在我的數據庫中讀/寫該信息。 (假設我有一個單獨的服務層,可以從其他數據庫填充這些類的數據。)

如何告訴EF NOT在我當前的db上下文中創建HairCutStyle表? 但與此同時,我想在CustomerHairCutPreference表中存儲一個值,該值是對其他地方存儲的HairCutStyle數據的引用。 排序的“虛擬”外鍵,不受實際數據庫FK約束的約束。

添加在屬性CustomerHairCutPreferenceHairCutSytleID然后用[NotMapped]在屬性HairCutStyle財產。 但請注意,您將負責確保HairCutStyleHairCutStyleID保持同步。

class CustomerHairCutPreference {
   public int ID { get; set; }
   public Customer Customer { get; set; }
   public int HairCutStyleID {get; set; }

   [NotMapped]
   public HairCutStyle HairCutStyle { get; set; }
}

或者,您可以使用HairCutStyle完全排除HairCutStyle不會被實體框架映射,如果您有多個鏈接到它的類,這可能很有用。

protected override void OnModelCreating(DbModelBuilder modelBuilder) {
    modelBuilder.Ignore<HairCutStyle>();
}

有三件事需要確保:

  1. 確保您沒有在DbContext派生的類中公開DbSet<HairCutStyle>
  2. 確保你沒有提及任何HairCutStyleOnModelCreating覆蓋
  3. 馬克您HairCutStyle使用屬性NotMapped屬性。

暫無
暫無

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

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