linqToSql之联合主键的运用

来源:互联网 发布:宏业软件官方电话 编辑:程序博客网 时间:2024/05/10 20:03

多个关联表联合查询时,如何决定主键,以及各表主键如何运用                               

var result = from ugu in eDataContext.UserGroupUser
                         join us in eDataContext.User on ugu.UserID equals us.UserID
                         join ug in eDataContext.UserGroup on ugu.UserGroupID equals                      ug.UserGroupID
                         select new { ID = ugu.ID + "_" + us.UserID, UserPWD = us.UserPWD, UserGroupID = ugu.UserGroupID, UserID = us.UserID, UserName = us.UserName, UserGroupName = ug.UserGroupName, IsEnabled = us.IsEnabled };

 

 

做两表修改提交时,数据库表要求为不能为空,实体中可以为空也必须设置为true,
eDataContext.User.First 方法中的条件必须为该表主键
以 联合主键作为AspxGridview的keyfileName后,做修改操作时,可以截取字符串来获取表的主键               //ID -- UserGroupUser
            string strId = e.Keys["ID"].ToString();
            int startIndex = strId.IndexOf("_");
            strId = strId.Substring(startIndex + 1);
            int intUserId = Convert.ToInt32(strId);

 

具体代码如下

protected void gvUser_RowUpdating(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e)
        {
            //UserId  -- User
            string strUserId = e.Keys["ID"].ToString();
            int endIndex = strUserId.IndexOf("_");
            strUserId = strUserId.Substring(0, endIndex);
            int id = Convert.ToInt32(strUserId);

            //ID -- UserGroupUser
            string strId = e.Keys["ID"].ToString();
            int startIndex = strId.IndexOf("_");
            strId = strId.Substring(startIndex + 1);
            int intUserId = Convert.ToInt32(strId);

            //ASPxGridView中获得的控件
            ASPxTextBox currentText = ((ASPxGridView)sender).FindEditFormTemplateControl("txtUserName") as ASPxTextBox;
            ASPxTextBox UserPWD = ((ASPxGridView)sender).FindEditFormTemplateControl("txtUserPWD") as ASPxTextBox;
            ASPxComboBox currentBox = ((ASPxGridView)sender).FindEditFormTemplateControl("cboUserGroup") as ASPxComboBox;
 
            //查询本条的UserGroupUser表记录 
            Casagroup.Entities.UserGroupUser userGroupUser = eDataContext.UserGroupUser.First(c => c.ID == id);
            //此 Value 为 ASPxComboBox的属性,而非页面绑定的Value='<%# Bind("UserGroupName") %>', 是专用来显示相应用户组的
            string v = (string)currentBox.Value;
            userGroupUser.UserGroupID = int.Parse(v);
            //查询本条的User表记录
            Casagroup.Entities.User user = eDataContext.User.First(c => c.UserID == intUserId);
            user.UserName = currentText.Text.Trim();          
            user.UserPWD = _common.EncryptToMD5(UserPWD.Text.Trim());          
            //同步修改
            eDataContext.SubmitChanges();
            e.Cancel = true;
            this.gvUser.CancelEdit();
            BindUserInfo();
        }

原创粉丝点击