首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新记录Linq-to-SQL

更新记录Linq-to-SQL
EN

Stack Overflow用户
提问于 2011-10-31 17:41:36
回答 4查看 2.8K关注 0票数 3

我正在阅读一本书--用Visual 2008编写的ASP.Net 3.5企业应用程序开发(2008),当它谈到使用Linq更新数据库中的记录时,它使用以下代码:

代码语言:javascript
复制
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

代码语言:javascript
复制
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更新数据库中记录的最佳方法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-31 17:54:14

就生成的sql而言,前者将生成一个Sql语句,类似于

代码语言:javascript
复制
Update MyUserAccount set blah=@Blah where UserAccountID = @UserAccountID

而后者将产生

代码语言:javascript
复制
Select UserAccountID, Blah, ....  From MyUserAccount where UserAccountID = @UserAccountID
Update MyUserAccount set blah=@Blah where UserAccountID = @UserAccountID
票数 1
EN

Stack Overflow用户

发布于 2011-10-31 17:51:20

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

票数 1
EN

Stack Overflow用户

发布于 2011-10-31 17:58:10

本书中的示例是在视图状态中存储用户帐户和版本信息--这是asp.net用来维护状态和存储表单变量的一个很大的隐藏字段。事实上,如果打开viewstate,则隐藏字段可能在viewstate中。

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

此外,代码中的linq语句将产生与该书不同的结果--因此我假设,如果不根据您的需要进行调整,图书代码不会按您的意愿进行更新。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7957443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档