2011-05-27 64 views
0

如果用戶有多個位置 並且用戶是否具有單一角色。 我的表的設計會像實體框架工作不支持一對一包容

TableUser

Userid (pk) 
Username 
RoleId (fk) 

TableRole

RoleId (pk) 
RoleName 

TableLocation

LocationId (pk) 
LocationName 

用戶位置

LocationId (fk) (part of composite pk) 
Userid (fk)(part of composite pk) 

我有實體框架4.0。

當我獲取一個用戶實體時,用戶實體沒有一個Role對象。 但它確實有一個Location對象。 這是爲什麼這樣? 它是實體框架的默認行爲嗎? 它默認只支持一對多關係嗎?

回答

0

是的,EF不支持以這種方式建模的一對一關係。要在數據庫中強制執行此關係,您必須在數據庫中使用唯一索引/約束標記RoleId。 EF不支持唯一鍵,因此無法將此關係建模爲一對一。在EF一到一個關係模型的唯一方法是在主鍵的頂部:

Role - PK RoleId 
User - PK, FK UserId 

這意味着,而不是User.RoleId您將使用User.UserId爲FK至Role

如果你想保持當前的結構必須使之成爲一個一對多的關係(一個角色可以有很多用戶),不要暴露在RoleUsers導航屬性,並把唯一的密鑰數據庫。它仍然允許您將多個用戶分配給應用程序中的單個角色,但如果您嘗試保存該數據庫,數據庫將觸發異常。

+0

嗨Ladislav Mrnka我已編輯我的文章給pk和fk希望你的文章仍然有效。我對嗎? – 2011-05-27 09:29:54

+0

我在等待對此的第三條評論。 – 2011-05-27 09:33:09