繁体   English   中英

LINQ TO SQL ::数据更新问题

[英]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的序列化。

您可以通过以下几种方法解决此问题。

  1. 在表中添加一个ROWVERSION列,并将其保留在对象中。 完成此操作并将对象附加到数据上下文后,更新将按预期工作。
  2. 重新选择更新方法中的记录,然后将属性从更新的对象手动复制到所选对象。 如果您想使其适用于所有表而不是仅适用于所有表,则也可以为此使用反射。 下面的示例代码。

这两个选项都是解决方法-我认为最好的选择是使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM