【问题标题】:Insert into bridge table entity framework插入桥表实体框架
【发布时间】:2012-06-05 23:04:18
【问题描述】:

大家好
我正在学习使用 EF 进行攀爬,我确实对使用 EF 的 CRUD 有基本的了解,但是现在我有一个具有导航属性的表(我怀疑是桥表),所以我需要在桥表中添加值,我想我可以用导航属性来做到这一点。

问题解释:
原始部分 DB 图

部分 EF 模型图

我写的代码:

   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);

产生异常

P.S:如果您需要更多说明,请告诉我。

【问题讨论】:

  • 什么是UserRoles?图表描述的模型中没有这样的导航属性。您只需将Role 添加到Roles 属性即可。
  • @LadislavMrnka 'UserRoles' 是桥(或联结)表,在创建用户时,用户必须被赋予一个角色(或多个角色),该角色将从“角色”表中引用。
  • 试试usr.Roles.Add(UserRoleWebsiteAdmin)
  • 他的意思是 Entity Framework 将为您完成这项工作,因为您的图像上显示了导航属性。因为您在映射表中有两个 FK,所以实体框架足够聪明,可以知道您在做什么,并且只是在幕后为您完成。

标签: asp.net visual-studio entity-framework entity-relationship junction-table


【解决方案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();

【讨论】:

    【解决方案2】:

    也许您可以使用 using http://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.";
    }
    

    问候

    【讨论】:

    • 感谢您的建议,我喜欢它,为此 +1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    相关资源
    最近更新 更多