LINQ to SQL - 存储过程如何与未提交的datacontext更改进行交互?

时间:2010-08-06 15:02:52

标签: linq-to-sql stored-procedures interaction submitchanges

有人问:

“Linq-To-Sql允许调用SP。如果此SP执行更新/删除/插入,我是否需要在它之后提交SubmitChanges()?”

答案是:

“不,你没有。代码可以工作。提交更改只涉及修改的LINQ to SQL对象而不是存储过程。”

我想澄清一下:

(请原谅,我对LINQ比较陌生)

是的,但是存储过程是否会绕过datacontext对象并修改数据库本身? (而linq仅修改datacontext对象,直到调用datacontext.submitchanges方法,然后修改数据库)

我可以以某种方式修改我的datacontext对象的存储过程吗?它已经这样做了吗?

我可以这样做吗

  • 如果我用linq调用SP(我假设它直接修改了数据库),
  • 然后使用linq修改我的datacontext对象,并将我所做的更改提交给我的datacontext对象,

我做的两个不同的更改(一个用SP,另一个用Linq到我的datacontext)不会干扰?

我真正想要的是让我的存储过程修改我的datacontext的方法。这可能吗?

我应该提一下,我正在将一个网站从SQL转换为LINQ,主要是存储过程,并试图选择我的战斗,使用哪些存储过程转换为LINQ,并保留在SQL中,然后使用SQL进行SP调用LINQ。

感谢您的帮助,-Jeff

2 个答案:

答案 0 :(得分:0)

FWIW,我们的石蕊测试是任何琐碎的'crud'类型PROC,插入/更新单个记录可以移动到ORM

但是,我们倾向于保留更高级的过程(批量更新或性能敏感的过程)''。

但是,是的,你需要在调用Proc之前调用SubmitChanges(),这取决于DataContext中更改的数据状态

可能不相关,如果您需要控制工作单元,请查看将TransactionScopes放在您的代码周围?

答案 1 :(得分:0)

如果通过存储过程更新记录,则加载(和跟踪)的对象可能会过时。如果使用陈旧对象调用SubmitChanges,您将获得并发异常。您可以使用Refresh上的DataContext方法刷新陈旧对象。