2012-10-15 268 views
1

你好我使用實體框架5和mvc4,並與實體框架關係關係在實體框架

我有一個用戶,角色和UserRole的表 SQL Table 該模型在實體框架創建掙扎

enter image description here

這裏是我用來保存用戶和角色但這並不工作 用戶和角色對象屬性中的代碼被傳遞給此方法之前被設置

public void saveNewUser(User u, Role r) 
{ 
    using (FormValueEntities db = new FormValueEntities()) 
    { 
     u.Roles.Add(r); 
     r.Users.Add(u); 
     db.SaveChanges(); 
    } 
} 

如何創建新用戶並同時設置角色?

+0

執行用戶/角色存在於數據庫已經或者是他們新的?你遇到了什麼錯誤? –

+0

他們存在於數據庫中,我沒有得到任何錯誤的數據只是不保存在數據庫中 –

回答

1

我認爲這可能是因爲用戶和角色沒有附加到您創建的上下文中。所以你需要做這樣的事情:

User newUser = new User(){ ... Set proprties ...}; 

db.Users.Add(newUser); 

newUser.Roles.Add(r); 

db.SaveChanges(); 

請注意,你不需要明確地在兩個方向添加鏈接。

+0

嗨我得到這個錯誤,當我使用你的代碼INSERT語句與FOREIGN KEY約束\「FK_UserRole_User \」衝突。該衝突發生在數據庫\「FormValue \」,表\「User.User \」,'UserId'列中。\ r \ n該語句已被終止。 –

+0

好吧,我認爲這是想你正在嘗試添加一個新用戶。看到上面的編輯,你可以試試嗎? –

+0

好的謝謝,但它增加了當前用戶的角色,我想創建一個新的用戶,併爲其分配一個角色 –

0

不要忘記在您的實體中包含UserRole表格。您可以簡單地將其拖放到設計視圖中。

0

首先你必須更新你的實體框架。

和代碼:

public void saveNewUser(User u, Role r) 
{ 
    using (FormValueEntities db = new FormValueEntities()) 
    { 
     db.Role.Add(r); 
     db.User.Add(u); 
     db.SaveChanges(); 
    } 
} 
+0

你剛纔發佈了與問題完全相同的代碼。 –

+0

不同的男人,我不知道他爲什麼使用u.Add和r.Add –

+0

啊,我明白了,對不起。 –

0

你可以嘗試使用成員身份API:

    const string adminRole = "Administrator"; 
        const string adminUserName = "Admin"; 
        WebSecurity.CreateUserAndAccount(adminUserName, "123456", null, false); 
        Roles.CreateRole(adminRole); 
        Roles.AddUsersToRole(new string[] { adminUserName }, adminRole);