我需要使用實體框架在多個數據表上實現實體 - 屬性 - 值功能。比方說,我有一個屬性值EF類,看起來像這樣:實體框架外鍵到多個表/實體
public class EntityAttributeValue
{
// Not important to my question.
public virtual Entity ParentEntity { get; set; }
public virtual EntityAttribute ParentEntityAttribute { get; set; }
// Field in question.
public Guid ParentSurrogateKey { get; set; }
public string Value { get; set; }
...
}
然後我有與它們相關的補充EAV值的多個實體:
public class Entity1
{
// Key. EntityAttributeBalue.ParentSurrogateKey maps to this.
[Key]
public Guid SurrogateKey { get; set; }
// Standard properties.
public string Property1 { get; set; }
public string Property2 { get; set; }
// Collection of EAV values associated with this entity/table.
[ForeignKey("ParentSurrogateKey")]
public virtual IList<EntityAttributeValue> EntityAttributeValues { get; set; }
}
public class Entity2
{
// Key. EntityAttributeBalue.ParentSurrogateKey maps to this.
[Key]
public Guid SurrogateKey { get; set; }
// Standard properties.
public string OtherProperty1 { get; set; }
public string OtherProperty2 { get; set; }
// Collection of EAV values associated with this entity/table.
[ForeignKey("ParentSurrogateKey")]
public virtual IList<EntityAttributeValue> EntityAttributeValues { get; set; }
}
我的問題是,無論是使用實體和ENTITY2具有與它們相關聯的EntityAttributeValue對象。代碼第一次遷移嘗試從EntityAttributeValue創建一個外鍵返回到Entity1,另一個返回到ParentSurrogateKey上的Entity2。任何單個給定EntityAttributeValue的代理鍵只與一個Entity1或一個Entity2(或擴展出來,一個EntityN ...)相關聯,而不是全部。
我在這裏有多對多的關係,但一方不僅映射到多行,而且映射到共享GUID列上的多個實體/表。
我應該如何處理這個問題?我是否應該從自動遷移中將EntityAttributeValue外鍵移回Entity1和Entity2(這將是一個長期的痛苦)?我應該手動檢索給定EAV實體的EntityAttributeValues列表,而不是依靠EF來爲我做?
我認爲這是一個基本的EF新手問題。如果實際上將它設置爲多對多,則自動創建的連接表將處理這種情況。我以爲我曾嘗試過,但顯然不是。如果這個成功發揮,我會回答我自己的問題。 –