我是新來的實體框架,並試圖弄清楚事情。我創建了一個不太複雜的數據庫。大約有7個表,其中3個映射表將一個表記錄與另一個表記錄相關聯。我使用的是這裏的例子是這樣的:使用實體框架,我該如何反映多對多的關係,並將存在的實體添加到正在創建的新實體中?
表用戶
- 用戶ID
- 用戶名
表角色
- 角色ID
- ROLENAME
表:UserRole的
- 用戶ID
- 角色ID
的外鍵在我的數據庫映射。當我在VS 2008中創建一個新的實體模型時,該圖似乎具有正確的關係,但不會爲UserRole表創建一個表。該關係被映射爲用戶之間的多對多角色。
我的問題是,我可以創建新的用戶,我可以創建新的角色,但我不知道如何創建一個新的用戶與現有的角色。此外,UserRole表可能未在模型中正確映射以開始。這裏是我到目前爲止的代碼:
ObjectQuery<Role> roles = context.Roles;
Role role = context.Roles.Where(c => c.RoleName == "Subscriber").First();
User user = new User
{
DisplayName = "TestCreate2",
Email = "[email protected]",
Password = "test"
};
context.AttachTo("Roles", role);
user.Roles.Add(role);
context.AddToUsers(user);
context.SaveChanges();
下面是我收到的錯誤:
無法更新EntitySet的「的UserRole」,因爲它有一個DefiningQuery並沒有元素,以支持當前的元素存在操作。
下面是涉及到的UserRole表中的XML:
<EntitySet Name="UserRoles" EntityType="RememberTheJourneyModel.Store.UserRoles" store:Type="Tables" store:Schema="dbo" store:Name="UserRoles">
<DefiningQuery>SELECT
[UserRoles].[Role_id] AS [Role_id],
[UserRoles].[User_id] AS [User_id]
FROM [dbo].[UserRoles] AS [UserRoles]</DefiningQuery>
</EntitySet>
它拔牙只是爲了弄清楚如何查詢,使得它給了我一個實際作用的實體範圍內。我確定這個問題與UserRole的映射方式有關,但我只是從這裏開始,並不知道哪裏可能出錯。
我真的已經搜索了谷歌&這個網站,但我想我還沒有拿出正確的搜索參數來找到一個問題,可以幫助我解決這個問題。我發現有一個問題說EF有這個問題,但是如果你映射表使兩個列成爲主鍵,它就會自行解決。我不知道該怎麼做。這是在數據庫(使用SQL SERVER 2005 EXPRESS)還是在映射中完成的?這是一個個人項目,所以如果需要的話,我可以發佈更多關於代碼或xml的細節。任何和所有的幫助將不勝感激。
就是這樣!我只是不知道如何分配2個主鍵。突出顯示兩行工作。謝謝! – jason 2010-01-24 23:40:00
沒問題 - 很高興我能幫到你。 – markt 2010-01-25 02:42:59