2010-08-06 25 views
1

有人问这里:LINQ to SQL - 存储过程如何与unsubmited datacontext更改进行交互?

“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中的战斗,并只对其进行SP调用与LINQ。

感谢你的帮助,-Jeff

回答

0

FWIW,我们的试金石任何微不足道的“污物”型PROC其插入/更新的单个记录可以在移动到ORM

然而,我们往往按原样离开更先进的特效(批次更新或高度敏感的特效)。

但是,是的,你需要调用一个Proc这是依赖于数据的DataContext的

可能无关的改变的情况下,如果你需要控制的工作单位之前有叫的SubmitChanges(),看把TransactionScopes放在你的代码中?

+0

“如果您需要控制工作单元,请考虑放置TransactionScopes”。或者只需手动打开一个连接,在其中启动一个事务并将该连接提供给DataContext的构造函数之一。 – Steven 2010-08-06 15:15:51

0

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