2011-03-17 61 views
0

我有一個小問題。當我將一個新項目添加到我的數據庫(EF)時,我有一個UpdateEception:無法更新EntitySet'UserRoles',因爲它有一個定義查詢並且元素中不存在元素以支持當前操作。POCO,實體插入錯誤在多對多關係

我有一張很小的桌子。

Users : 

- [PK] UserID 
- Login 
- Password 
- Email 
- IsActive 

Roles : 
- [PK] RoleID 
- Name 

UserRoles : 
- [FK] UserID 
- [FK] RoleID 

Get方法

User u = db.Users.Single(x => x.Login == "scott"); 

工作正常,但不插入:/我試了很多辦法。我嘗試添加PK UserRoles,它的工作,但不喜歡它會。這些關係將會很多 - >一個 - >很多,並不是很多,我必須有一個額外的班級。我不知道如何解決這個問題。

我的實體類太簡單了。角色類中的列表和用戶類中的列表是虛擬的。

public class TestDBEntity : ObjectContext 
{ 
    public ObjectSet<Role> Roles { get; set; } 
    public ObjectSet<User> Users { get; set; } 

    public TestDBEntity() 
     : base("name=TestDBEntities", "TestDBEntities") 
    { 
     ContextOptions.LazyLoadingEnabled = true; 

     this.Roles = CreateObjectSet<Role>(); 
     this.Users = CreateObjectSet<User>(); 
    } 
} 
+0

你可以發佈你的代碼嗎?也許也是EDM - 它可以幫助看到問題。 – Yakimych 2011-03-17 16:54:18

回答

0

您必須在UserRoles表中創建組合鍵(UserID,RoleID)。沒有其他方式,因爲沒有定義的主鍵,表被映射爲只讀視圖。它仍然會建模爲多對多的關係,但您必須首先從模型中刪除實體,然後再通過從數據庫更新來添加它們。