我正在开发一个项目(使用3层方法),我在其中使用LINQ TO SQL ... 我想更新用户...
但是我遇到了一些问题。它不会给我任何错误,但也不会更新用户细节
这是程序序列;
在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;
}
}
之后我得到这个更新用户的详细信息。它向我展示了以前的细节。意味着它没有用新的更新用户的细节......
善意解决这个问题
答案 0 :(得分:2)
在您的UpdateUser方法中,您声明了一个新的DataContext,因此没有附加DM_User参数,这就是SubmitChanges方法什么都不做的原因。
答案 1 :(得分:1)
问题是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;
}
}
}
}
有关详细信息,请参阅this question上的答案。