某天,这个关系错综复杂的表格修改,让我感到困扰。
代码大概是:using 一个事务,事务里 放着七八个表格的修改。表格之间的数据相互关联。
改一改 结果如下:
/// <summary>
/// 需要传递的共享数据
/// </summary>
private class ShareAddUserModel
{
public LoginNameUser LoginUser { get; set; }
public Users User { get; set; }
public int RefType { get; set; }
}
private void UserAdd(ShareAddUserModel shareModel)
{
int refType = shareModel.LoginUser.RefType.ToInt(-1);
var usersBO = ServiceLocator.GetService<IUsersBO>();
Users user = new Users(); var userCount = usersBO.GetSingle(o => o.LoginName == shareModel.LoginUser.LoginName);
if (userCount != null)
{
user.ID = userCount.ID;
}
else
{
var pwd = "";
pwd = DESEncrypt.Encrypt(shareModel.LoginUser.PassWord);
user.LoginName = shareModel.LoginUser.LoginName;
user.PassWord = pwd;
user.NickName = shareModel.LoginUser.ContactsName;
user.Mobile = shareModel.LoginUser.Tel;
user.Fax = shareModel.LoginUser.Fax;
user.UserType = refType < 4 ? 5 : 6;
usersBO.Add(user);
}
//加入需要共享的数据
shareModel.User = user;
shareModel.RefType = refType;
//调用下个方法
R_Users_RoleAdd(shareModel);
}
private void R_Users_RoleAdd(ShareAddUserModel shareModel)
{
var r_users_roleBO = ServiceLocator.GetService<IR_Users_RoleBO>();
if (r_users_roleBO.GetSingle(o => o.UserID == shareModel.User.ID) != null)
{
throw new Exception("一个用户对应了多个角色");
}
R_Users_Role r_users_role = new R_Users_Role()
{
UserID = shareModel.User.ID,
RoleID = shareModel.RefType < 2 ? Com.WELLS.Framework.Entities.EnumExt.RoleEnum.Customer : (shareModel.RefType < 4 ? Com.WELLS.Framework.Entities.EnumExt.RoleEnum.contractClient : Com.WELLS.Framework.Entities.EnumExt.RoleEnum.contractConsignor)
};
r_users_roleBO.Add(r_users_role);
//加入共享数据
//调用下个方法
}
事务里面的代码如下:
TransactionOptions option = new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted };
using (TransactionScope trans = new TransactionScope(scopeOption: TransactionScopeOption.Required, transactionOptions: option, interopOption: EnterpriseServicesInteropOption.None))
{
ShareAddUserModel shareModel = new ShareAddUserModel { LoginUser = UserLoginName };
UserAdd(shareModel);
}