簡體   English   中英

多個表/實體的實體框架外鍵

[英]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.

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