2011-06-05 87 views
2

我快到了。我越接近1到0..1的關係。如何在實體框架中建立真正的一對一關係?

我的物理架構是:

User: 
- Id : int primary Key identity 
- Name : varchar(50) 

UserDetail: 
- Id : int primary Key | foreign key to User.Id 
- DisplayName : varchar(200) 

當我導入此沙瑪在實體數據模型設計,Visual Studio 2010的建議1至0..1關係。如果我強制執行1..1,它會接受,但結果看起來不像1..1關係。

我期望從1..1的關係中得到什麼?

我期望它可以:

  • 當我創建一個UserDetail,反之亦然(最好)
  • 拋出一個異常,當我嘗試保存用戶沒有UserDetail和副自動創建用戶-versa

我該如何做到這一點?

+0

據我所知,現在的EF版本是不可能的,但是您可以創建業務邏輯來強制執行此操作,然後再將其保存到數據庫中。 – Joakim 2011-06-05 13:00:02

+0

@Joakim:謝謝,但爲什麼EDMX設計師允許我說如果它不被支持,它就是1x1關係?至於EF,從1x1到1x0..1有什麼區別? – 2011-06-05 13:06:56

+0

剛剛發現這個問題http://stackoverflow.com/questions/1761362/entity-framework-one-to-one-mapping-issues,這表明我可能錯了,不得不原諒我缺乏知識。 – Joakim 2011-06-05 15:28:27

回答

6

,因爲真正的1對1的關係意味着你必須有FK從UserUserDetail,並在同一時間從FK到UserDetailUser甚至沒有在數據庫級別上的支持。 1到1表示如果沒有第二條記錄,則一條記錄不能存在,但在檢查參照約束時,不可能將這些記錄插入表中。

一對一實際上總是從1到0..1,因爲您必須能夠插入沒有依賴關係的主記錄,並且一旦主記錄持續存在,您可以插入依賴關係記錄。 EF與關係數據庫的工作方式密切相關。我知道唯一的情況是純粹的1到1的工作是table splitting,您將實體映射到同一個表,因此兩個實體總是必須存在並且被插入到一起,因爲它們形成單個記錄。

如果您想要始終將UserUserDetail保存在一起,則應使用Entity splitting將它們建模爲單個實體。

+0

感謝您的鏈接。 – mshsayem 2011-11-13 09:50:24

相關問題