[英]LINQ TO SQL :: Data Update Problem
我正在开发一个使用LINQ TO SQL的项目(使用3层方法)...我想更新用户...
但我面临一些问题。 它不会给我任何错误,但也不会更新用户详细信息
这是程序顺序;
在UpdateProfile.aspx中
String currentUser = Session["BMUser"].ToString();
String displayName = txtDisplayName.Text;
String username = currentUser;
String emailAddress = txtEmailAddress.Text;
String secretQuestion = txtSecretQuestion.Text;
String secretAnswer = txtSecretAnswer.Text;
if (UserManager.UpdateProfile(username, displayName, emailAddress, secretQuestion, secretAnswer))
{
lblStatus.Text = "Profile Updated";
}
else
lblStatus.Text = "Unable to Update Profile";
UserManager是BLL类
public class UserManager
{
public static bool UpdateProfile(String username, String displayName, String emailAddress, String secretQuestion, String secretAnswer)
{
// This method will return BM_User (BM_User in entity class generated by LINQ TO SQL)
BM_User user = UserCatalog.GetUserByName(username);
if (user != null)
{
user.DisplayName = displayName;
user.EmailAddress = emailAddress;
user.SecretQuestion = secretQuestion;
user.SecretAnswer = secretAnswer;
if (UserManagerDAO.UpdateUser(user, false))
{
//HttpContext.Current.Session["BMUser"] = userToUpdate;
return true;
}
else
return false;
}
else
return false;
}
}
最后是UserManagerDAO
public class UserManagerDAO
{
public static bool UpdateUser(BM_User user, bool changeLoginDateTime)
{
BugManDataContext db = new BugManDataContext();
if (changeLoginDateTime == true)
user.LastLoginDate = DateTime.Now;
db.SubmitChanges();
return true;
}
}
之后,当我获得此更新用户的详细信息时。 它显示了我以前的细节。 意味着它不会使用新的更新用户的详细信息...
请解决这个问题
在UpdateUser方法中,您要声明一个新的DataContext,因此BM_User参数未附加到该参数,这就是为什么SubmitChanges方法不执行任何操作的原因。
问题是UserManagerDAO.UpdateUser中的用户来自不同的数据上下文。 为此,如果要跨越上下文边界,则必须使用LINQ的序列化。
您可以通过以下几种方法解决此问题。
这两个选项都是解决方法-我认为最好的选择是使用linq序列化,但是如果不是这样,请尝试其中一种。
// example code for #2 above...
public class UserManagerDAO
{
public static bool UpdateUser(BM_User user, bool changeLoginDateTime)
{
using(BugManDataContext db = new BugManDataContext())
{
// lookup the current user in the database.
var dbUser = (from u in db.Users
where u.Id == user.Id
select u).Single();
if (changeLoginDateTime == true)
{
// update all the fields from your passed in user object
dbUser.Field1 = user.Field1;
dbUser.Field2 = user.Field2;
dbUser.Field3 = user.Field3;
dbUser.LastLoginDate = DateTime.Now
dbUser.LastLoginDate = DateTime.Now;
db.SubmitChanges();
return true;
}
}
}
}
有关更多信息,请参见此问题的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.