[英]How to use multiple tables with the same foreign key with Entity Framework
[英]Entity Framework foreign key to multiple tables/entities
我需要使用實體框架在多個數據表上實現實體屬性值功能。 假設我有一個屬性值 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; }
}
我的問題是 Entity1 和 Entity2 都有與之關聯的 EntityAttributeValue 對象。 代碼優先遷移嘗試在 ParentSurrogateKey 上創建一個從 EntityAttributeValue 返回到 Entity1 的外鍵和另一個返回到 Entity2 的外鍵。 任何單個給定 EntityAttributeValue 的代理鍵僅與一個 Entity1 或一個 Entity2(或擴展為一個 EntityN...)相關聯,而不是兩者/全部。
我在這里有一個多對多的關系,但一方面不僅映射到多行,而且映射到共享 GUID 列上的多個實體/表。
我應該如何接近這個? 我是否應該從自動遷移中將 EntityAttributeValue 外鍵刪除回 Entity1 和 Entity2(這將是一個長期的痛苦)? 我應該手動檢索給定 EAV 實體的 EntityAttributeValues 列表,而不是依賴 EF 為我做這件事嗎?
嗯,答案很明顯也很簡單。 我需要用 FluentAPI 定義多對多關系。 在 OnModelCreating 中,我剛剛添加了:
modelBuilder.Entity<Entity1>()
.HasMany(m => m.EntityAttributeValues)
.WithMany();
modelBuilder.Entity<Entity2>()
.HasMany(m => m.EntityAttributeValues)
.WithMany();
我以為我試過這個,但我想我沒有。 因為多對多關系為每個實體創建了一個中間表,並且外鍵在該中間表上(並且當給定的 EntityAttributeValue 應用於給定的實體時,中間表中只有一行),所以沒有外鍵問題.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.