【发布时间】:2009-04-30 06:25:06
【问题描述】:
我有一个存储过程来更新记录,运行它后我使用 LinqToSql 删除记录。我知道这很奇怪,但我只是想测试一下 datacontext 的智能程度并了解它是如何工作的。
由于数据上下文缓存了结果,因此可以记录通过它进行的任何更改,但现在我使用存储过程来更新某些内容,它不会知道。因此,当我尝试删除它时,会出现“未找到或更改行”的异常。
如何告诉数据上下文我更新了什么?如果我能这样做,问题就会解决。
【问题讨论】:
我有一个存储过程来更新记录,运行它后我使用 LinqToSql 删除记录。我知道这很奇怪,但我只是想测试一下 datacontext 的智能程度并了解它是如何工作的。
由于数据上下文缓存了结果,因此可以记录通过它进行的任何更改,但现在我使用存储过程来更新某些内容,它不会知道。因此,当我尝试删除它时,会出现“未找到或更改行”的异常。
如何告诉数据上下文我更新了什么?如果我能这样做,问题就会解决。
【问题讨论】:
您可以使用传入 System.Data.Linq.RefreshMode 枚举的 DataContext Refresh() 方法;这是一个例子:
NorthWindDataContext context = new NorthwindDataContext();
context.Refresh(RefreshMode.KeepChanges);
澄清:
http://msdn.microsoft.com/en-us/library/system.data.linq.refreshmode.aspx">RefreshMode 枚举有 3 个值:
此处使用的版本 (KeepChanges) 强制 Refresh 方法保留修改后的值,并通过数据库中的值更新其他未修改的值。
【讨论】:
我想我遗漏了一些东西,但如果你知道你的存储过程只是删除了记录,那么为什么还要在事后打扰 Linq2Sql 呢? DataContext 不会神奇地知道删除。
【讨论】: