簡體   English   中英

通過關聯表的實體框架1to1關系在EDMX中不起作用

[英]Entity Framework 1to1 relationship via association table not working in EDMX

我在SQL Server數據庫中有以下表 在此輸入圖像描述

其中有一個1-1關聯表(FooBar),它在相應的FooId,BarId上有唯一索引,主鍵是(FooId,BarId)。

要清楚FooBar不允許任何FooId(由於唯一約束)不止一次在表中,任何BarId(由於唯一約束)都不會在表中多次出現。 這就是使其成為1-1關聯表的原因。

我希望在Foo和Bar之間建立這種關聯表而不是1-1關系,因為在我的真實世界場景中,Bar將與其他不相關的表有其他關系,我將需要類似的關聯表(而不是向Bar添加新的FK列)對於每個新表)

然后我將這些表格帶入我的EDMX設計師。 這種關系是以多對多而非一對一的方式引入的。 在此輸入圖像描述

這當然不是我想要的。 我可以手動將模型更改為1-1關系。 在此輸入圖像描述

但后來我得到了一個錯誤(在設計師中)。 在此輸入圖像描述

這是一個錯誤還是不可能在EF中以這種方式創建1-1關聯?

這是整個EF設計的“缺陷”: 實體框架4-6.1x 尊重主鍵上的多重性

因此,即使我們知道 (和RA模型)由於候選鍵約束而是1-1關系,EF也不會也不會喜歡它。 倒霉。

“解決方案”包括:

  1. 將模型更改為EF理解的內容(EF理解Code First,而不是RA)。 當然,這可能表明所選RA模型存在“問題”,但這與問題正交。

  2. 生活在錯誤生成的多重性規則和“謹慎使用”; 臟工作可以包裝,但必須在自動生成的模型之外手動添加。

  3. 嗯,其他人?

對未解決的問題的無恥插件處理相同的核心缺乏功能:

就EF而言,您在第一張圖形中顯示的關系不是1to1關系。

這是FooBar之間的多對多關系

以這種方式思考:

可能與以下FooBar值組合

Foo
1
2
3

Bar
1
2
3

FooBar
1, 1
1, 2
1, 3
2, 1
2, 2
2, 3
3, 1
3, 2
3, 3

你的FooBar表是一個復合鍵,這意味着它是構成鍵的Foo和Bar值的組合 - 而不是1對1的關系

要定義Foo和Bar之間的1對1關系,您的架構應該看起來更像這樣:

Foo
FooId PK

Bar
FooId PK FK to Foo.FooId

foo和bar之間的1to1關系不需要FooBar表。

正如您在問題/評論中所述 - 是的,您對復合鍵的各個部分設置了唯一約束,但EF在確定關系時未考慮模型的唯一約束。 如果您想要1to1關系,則應創建1to1模型,而不是通過唯一約束模擬1to1關系。

暫無
暫無

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

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