1


我正在學習用EF爬,我也有EF CRUD的基本認識,但現在我有有一個導航屬性(我懷疑表是橋表),所以我需要在橋表中添加值,我想我可以通過導航屬性來實現。
插入到表橋實體框架

問題解釋:
原始分DB圖 enter image description here

部分EF模型圖
enter image description here

代碼我寫道:

protected void BtnAddUser_Click(object sender, EventArgs e) 
    { 
     DBEntities entities = new DBEntities(); 
     var usr = new User(); 
     //I thought I would add an Roles object into usr.UserRoles.Add(usrRoles); 
     //but UserRoles have only two fields ,RoleTypeId and UserId 
     //var usrRoles = new Roles() 
     //{Id=0,RoleDescription="dfdfdf",RoleType="WebSite Admin"}; 

     usr.UserName = TxtbxUserName.Text; 
     usr.Password = TxtBxPassword.Text; 
     usr.Email = TxtbxEmail.Text; 
     usr.CreateDate = DateTime.Now; 
     usr.LastActivityDate = DateTime.Now; 
     usr.IsEnabled = true; 

     //What to Add in the .Add method 
     usr.UserRoles.Add(

     entities.User.AddObject(usr); 
     int result = entities.SaveChanges(); 
     LblMsg.Text = result == 1 ? "User created successfully." : "An error occured ,please try later."; 

     entities.Dispose(); 
    } 

更新(我至今嘗試過):
我取從角色表「網站管理員」的角色,並把它變成ObjectContext.UserRoles.Add(UserRoleWebsiteAdmin); 所以這是我的代碼一樣,

 //Fetch WebsiteAdmin from Roles 
     var userRole = from usrRole in entities.Roles 
         where usrRole.Id == 1 
         select usrRole; 

     usr.UserName = TxtbxUserName.Text; 
     //same old code of usr.Property = someTextBox 
     //I have tried to type cast it LinqtoEntities result into Roles 
     usr.UserRoles.Add((Roles)userRole); 

異常產生
enter image description here

PS:讓我知道你是否需要更多的澄清。

+0

什麼是UserRoles?您在圖表描述的模型中沒有這樣的導航屬性。您只需要將「角色」添加到「角色」屬性。 –

+0

@LadislavMrnka'UserRoles'是橋(或聯結)表,在用戶創建時,用戶必須被賦予一個角色(角色),角色將從'角色'表中引用。 –

+0

但該表格不在您的模型中。您不需要它,只需將'Role'添加到'user.Roles'中,EF將處理它。 –

回答

1

也許你可以使用usinghttp://msdn.microsoft.com/en-us/library/yh598w02.aspx和對象初始化http://msdn.microsoft.com/en-us/library/bb384062.aspx爲更好的可讀性這樣:

using(DBEntities entities = new DBEntities()) 
{ 
     //Make user object 
     var user = new User{ 
      UserName = TxtbxUserName.Text, 
      Password = TxtBxPassword.Text, 
      Email = TxtbxEmail.Text, 
      CreateDate = DateTime.Now, 
      LastActivityDate = DateTime.Now, 
      IsEnabled = true 
     }; 

     //Fetch type of Role from Roles table 
     var userRole = entities.Roles.Where(x=>x.usrRole.Id ==1).Single(); 
     user.UserRoles.Add(userRole); 

     entities.User.AddObject(user); 
     int result = entities.SaveChanges(); 
     LblMsg.Text = result == 2 ? "User created succesfully." : "An error occured ,please try later."; 
} 

問候

+0

感謝這個建議,我喜歡,+1 –

1

以及感謝傢伙... 在這裏我做了什麼和它的作品,

 DBEntities entities = new DBEntities(); 
     //Make user object 
     var usr = new User(); 
     //Fetch type of Role from Roles table 
     var userRole = (from usrRole in entities.Roles 
         where usrRole.Id == 1 
         select usrRole).Single(); 
     //copy user related info from textboxes 
     usr.UserName = TxtbxUserName.Text; 
     usr.Password = TxtBxPassword.Text; 
     usr.Email = TxtbxEmail.Text; 
     usr.CreateDate = DateTime.Now; 
     usr.LastActivityDate = DateTime.Now; 
     usr.IsEnabled = true; 


     usr.UserRoles.Add(userRole as Roles); 

     entities.User.AddObject(usr); 
     int result = entities.SaveChanges(); 
     LblMsg.Text = result == 2 ? "User created succesfully." : "An error occured ,please try later."; 

     entities.Dispose();