Ale*_*lex 2 asp.net-mvc linq-to-sql
几个星期前我开始使用linq to SQL.我真的厌倦了通过SQL查询直接使用SQL服务器(sqldatareader,sqlcommand和所有这些好东西).
在听说了linq to SQL和mvc后,我很快将所有项目都转移到了这些技术上.我希望linq对SQL工作的速度要慢一些,但结果却非常快,主要是因为我总是忘记在使用数据加载器时关闭连接.现在我不用担心.
但是有一个问题真的困扰我.有一页每天要求数千次.系统在开始时获取数据,使用它并更新它.主要是更新是++ @ - (增加和减少值).我曾经这样做过
UPDATE表SET值=值+ 1 WHERE ID = @I'd
它显然没有问题.但是使用linq to SQL,数据在开始时被移动,移动到类,更改然后保存.
Stats.registeredusers ++; Db.submitchanges();
假设有10万用户.Linq会说"让它成为100 001",而不是"让它增加1".
但是如果用户的价值已经增加(这种情况一直发生在我的网站上)那么linq将会像oops一样,这个值已经是100 001.无论我抛出什么异常"
您可以更改此行为,以便它不会抛出异常,但仍然不会将值设置为100 002.
就像我说的那样,它一直伴随着我.stas值平均每秒增加两次.我只需用经典的ado net重写这段代码.
所以我的问题是如何用linq解决问题
对于这些类型的"只写查询",我通常使用存储过程.您可以将存储过程拖到设计器中并通过Linq to SQL DataContext类执行它(它将作为方法添加).
很抱歉这个答案很简单,但它确实很简单; 没有必要使用原始ADO.NET SqlCommand对象等finagle ,只需导入SP就可以了.或者,如果您想真正进行临时,请使用该ExecuteCommand方法,如:
context.ExecuteCommand("UPDATE table SET value = value + 1 WHERE ID = {0}", id);
Run Code Online (Sandbox Code Playgroud)
(但是不要过度使用它,它可能很难维护,因为你的DataContext实例中不再包含逻辑.在任何人跳过这个声称它是一个SQL注入漏洞之前,请注意ExecuteCommand/ ExecuteQuery是智能方法可以解决这个问题进入参数化语句/查询.)
| 归档时间: |
|
| 查看次数: |
284 次 |
| 最近记录: |