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

Linq to sql LINQ到SQL-存储过程如何与未提交的datacontext更改交互?,linq-to-sql,stored-procedures,interaction,submitchanges,Linq To Sql,Stored Procedures,Interaction,Submitchanges,有人问: Linq To Sql启用调用SP。如果此SP执行更新/删除/插入,是否需要在更新/删除/插入后提交更改() 答案是: “不,您不需要。代码可以工作。提交更改只涉及修改的LINQ到SQL对象,而不涉及存储的过程。” 我只想澄清: (请原谅,我对LINQ比较陌生) 是的,但是存储过程不会绕过datacontext对象并修改数据库本身吗?(而linq只修改datacontext对象,直到调用datacontext.submitchanges方法,然后修改数据库) 我可以让存储过程以某种方式

有人问:

Linq To Sql启用调用SP。如果此SP执行更新/删除/插入,是否需要在更新/删除/插入后提交更改()

答案是:

“不,您不需要。代码可以工作。提交更改只涉及修改的LINQ到SQL对象,而不涉及存储的过程。”

我只想澄清:

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

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

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

我可以这样做吗

  • 如果我使用linq调用SP(我假设它直接修改数据库)
  • 然后使用linq修改我的datacontext对象,并提交我对datacontext对象所做的更改
我所做的两个不同的更改(一个使用SP,另一个使用Linq到我的datacontext)不会产生干扰

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

我应该提到的是,我正在将一个网站从SQL转换为主要包含存储过程的LINQ,并尝试选择将哪些存储过程转换为LINQ,哪些存储过程保留在SQL中,然后使用LINQ对它们进行SP调用


感谢您的帮助,-Jeff

FWIW,我们的试金石测试是任何简单的“crud”类型的过程,它插入/更新单个记录可以移动到ORM

但是,我们倾向于让更高级的过程(批处理更新或对性能高度敏感的更新)保持“原样”

但是,是的,您需要在调用依赖于DataContext中更改的数据状态的过程之前调用SubmitChanges()


可能不相关,如果您需要控制工作单元,请考虑在代码周围放置TransactionScope?

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

上的
refresh
方法“如果需要控制工作单元,请查看放置事务范围”来刷新过时对象。或者只是手动打开一个连接,在其中启动一个事务,并将该连接提供给
DataContext
的构造函数之一。