更新记录linqto - sql

本文关键字:sql linqto 新记录 更新 | 更新日期: 2023-09-27 18:12:59

我在读一本书- ASP。Net 3.5 Enterprise Application Development with Visual Studio 2008,当它谈到使用Linq-to-SQL更新数据库中的记录时,它使用以下代码:

MyUserAccount ua = new MyUserAccount
{
... Update fields
};
ua.UserAccountID = Convert.ToInt32(session["UserAccountID"]);
ua.Version = Convert.ToInt32(session["Version"]);
MyDataContext db = new MyDataContext();
db.MyUserAccounts.Attach(ua,true);
db.SubmitChanges();

与我习惯的方法相比,我只是将AccountID保存在会话变量中然后从数据库中获取记录,进行更改,然后提交更改。

BtnUpdate

int UserAccountID = Convert.ToInt32(Request["UserAccountID"]);
//Get User fron Context
MyDataContext db = new MyDataContext();
MyUserAccount ua = db.MyUserAccounts.Single(
     x => x.UserAccountID == UserAccountID);
//Make changes
ua.Blah = "";
db.SubmitChanges();

所以我的问题是,首选的方法是什么?由于过去没有见过这种情况,我不确定首选或最好的方法是什么。如有任何帮助,不胜感激。

韦德

注意:

我最初的问题,有人改了我的标题,是什么是最好的Linq-to-SQL方式来更新记录。所以我改变了代码,使用会话变量和标题回到原来的。请阅读整个问题,因为我只是在寻找使用Linq-to-SQL更新数据库中记录的最佳方法。

更新记录linqto - sql

对于生成的sql,前者将生成类似

的sql语句
Update MyUserAccount set blah=@Blah where UserAccountID = @UserAccountID

而后者将产生

Select UserAccountID, Blah, ....  From MyUserAccount where UserAccountID = @UserAccountID
Update MyUserAccount set blah=@Blah where UserAccountID = @UserAccountID

两者都不做,将关键数据存储到会话中。隐藏字段(viewstate是一个隐藏字段)可能被用户篡改。会话将阻止用户更改该值

书中的示例将用户帐户和版本信息存储在viewstate中——这是一个很大的隐藏字段,asp.net使用它来维护状态和存储表单变量。事实上,如果你打开了viewstate,你的隐藏字段可能会处于viewstate状态。

如果您关闭viewstate并使用隐藏字段,那么页面可能会加载得更快(由于维护viewstate所涉及的膨胀)。但这可能会影响功能。

你代码中的linq to sql语句也会产生与书中不同的结果——所以我假设书中的代码不会像你希望的那样更新,除非根据你的需要进行调整。

@Matthew是对的,如果你有安全问题,那么明文隐藏字段是存储某些东西(+1)的坏地方。

Viewstate在数据上添加了一些加密,因此与使用原始隐藏字段相反,它不会轻易被篡改。处理用户信息的最佳方法是将其存储在会话中。