簡體   English   中英

實體框架-多個組成相同的類

[英]Entity framework - multiple composition to same class

TL; DR

我希望使用不同的方式將使用Entity Framework的多個合成映射到同一個類,該組件具有對作曲家的單個外鍵,或在兩者之間有一個表。

正確的解釋

我正在使用Enterprise Architect設計一些代碼。 感興趣的類的UML如下所示:

UML

用C#生成的代碼是

public class A
{
    public int id { get; set; }

    public List<B> foo { get; set; }

    public List<B> bar { get; set; }

}

public class B
{
    public int id { get; set; }

    // fields...

}

大! 那就是我想要的。 但是,我的Entity Framework代碼優先方法(無法更改,已經在項目中使用了多年)創建的遷移與我希望的完全不一樣。

A是僅包含其字段的表(在示例中,為id)。 B如下:

|   id   | field1 | field2 | A_ID1 | A_ID2 |

很好,它可以工作,但是問題是,在實際情況下,我對多個類有大約十種成分。 B的相同實例永遠不會在多個類之間共享。 結果是這樣的表

|   id   | field1 | field2 | A_ID1 | A_ID2 |
|   1    |   ..   |  ..    |   1   | null  |
|   2    |   ..   |  ..    |   2   | null  |
|   2    |   ..   |  ..    |  null |   3   |

即每行只有一個外鍵(並且我重復一遍,因為這是我最困擾的問題,有很多外鍵)不為空,所有其他為空。

您對改善這種映射有什么建議嗎? 我正在使用的工具是

企業架構師<->實體框架<-> EF代碼優先遷移

從概念上看來,您從AB只有一種關系。 從每個鏈接,但是您需要知道它是foo還是bar

在邏輯數據模型中,我可能會像這樣建模: 在此處輸入圖片說明

在可以用鏈接表 ABProperties實施的數據庫中,該鏈接表 ABProperties具有AB的外鍵,並且具有一個額外的列ABType來容納FooBar

在FK上向B添加唯一約束應確保上限約束為1,以確保您不能將B行與多個A連接在一起

由於我不熟悉您的代碼生成工具集,因此不確定它是否支持關聯類。

如果工具集不支持關聯類,則可以將類型設置為B類的屬性。

在此處輸入圖片說明

它不像關聯類的解決方案那么干凈,但是我認為它可以工作,因為B只能是一個A一部分。

暫無
暫無

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

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