我已經花了幾個小時試圖谷歌這個答案,但我什麼也沒有提出。我希望這只是我不知道如何說明這一點而不是技術限制。我正在使用實體框架Code-First(v5),我試圖創建一個模型,它有兩個導航屬性共享一個外鍵。很明顯,這個外鍵不能存在於數據庫中,因爲它不能指向兩個子表。英孚能夠解決這個問題,仍然找出我想要使用自定義映射或註釋?實體框架 - 兩個導航屬性,一個鍵?
例子:
public class Parent {
public int Id { get; set; }
public string EntityType { get; set; }
public int EntityId { get; set; }
// Additional properties
[SomeSortOfAttributeICanPutHereToIndicateThisShouldUse("EntityId")] //?
public virtual Child1 { get; }
[SomeSortOfAttributeICanPutHereToIndicateThisShouldUse("EntityId")] //?
public virtual Child2 { get; }
}
public class Child1 {
public int Id { get; set; }
public string Prop1 { get; set; }
}
public class Child2 {
public int Id { get; set; }
public string Prop2 { get; set; }
}
public Database : DbContext {
public DbSet<Parent> Parents { get; set; }
public DbSet<Child1> Children1 { get; set; }
public DbSet<Child2> Children2 { get; set; }
}
var db = new Database();
var child1prop = db.Parents.First(p => p.EntityType == "Child1").Child1.Prop1;
var child2prop = db.Parents.First(p => p.EntityType == "Child2").Child2.Prop2;
正是我試圖做甚至有可能與實體框架,還是我浪費我的時間?
我認爲你正在尋找的是一個表類型(TPT)的繼承。在這裏閱讀更多關於它:http://weblogs.asp.net/manavi/archive/2010/12/28/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-2-table- per-type-tpt.aspx 編輯:我會詳細說明。如果你的Child1對象和你的Child2對象有相同的外鍵,我猜他們應該有相同的基類(我們稱之爲ChildBase)。如果你讓Parent的Child屬性爲ChildBase類型,你應該擁有你想要的東西 – Gabe
'Child1'和'Child2'有很多相似之處嗎?或者,從一個基類中派生出來會有意義嗎? –