多个关联表联合查询时,如何决定主键,以及各表主键如何运用
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();
}