我正在阅读一本书--用Visual 2008编写的ASP.Net 3.5企业应用程序开发(2008),当它谈到使用Linq更新数据库中的记录时,它使用以下代码:
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方式来更新记录。因此,我将代码更改为使用会话变量,并将标题返回到原来的标题。请阅读整个问题,因为我只是在寻找使用Linq更新数据库中记录的最佳方法。
发布于 2011-10-31 17:54:14
就生成的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发布于 2011-10-31 17:51:20
这两种方法都不做,将像这样的关键数据存储到会话中。隐藏字段(viewstate是一个隐藏字段)可能被用户篡改。会话将阻止用户更改值。
发布于 2011-10-31 17:58:10
本书中的示例是在视图状态中存储用户帐户和版本信息--这是asp.net用来维护状态和存储表单变量的一个很大的隐藏字段。事实上,如果打开viewstate,则隐藏字段可能在viewstate中。
如果您关闭viewstate并使用您的隐藏字段,那么页面可能会加载得更快(因为维护viewstate所涉及的膨胀)。但这可能会影响功能。
此外,代码中的linq语句将产生与该书不同的结果--因此我假设,如果不根据您的需要进行调整,图书代码不会按您的意愿进行更新。
@Matthew是对的,如果您有安全问题,那么明文隐藏字段是存储某物的坏地方(+1)。
https://stackoverflow.com/questions/7957443
复制相似问题