Linq to sql 如何告诉datacontext I';我已经通过存储过程更新了记录

Linq to sql 如何告诉datacontext I';我已经通过存储过程更新了记录,linq-to-sql,datacontext,Linq To Sql,Datacontext,我有一个存储过程来更新记录,在运行它之后,我使用LinqToSql删除记录。我知道这很奇怪,但我只是想测试datacontext的智能性,了解它是如何工作的 由于datacontext缓存结果,因此可以记录通过它进行的任何更改,但现在我使用存储过程来更新某些内容,它不会知道。所以,当我试图删除它时,会出现一个异常“Row not found或changed” 如何告诉datacontext我更新了什么?如果我可以这样做,问题就会解决。我想我遗漏了一些东西,但是如果你知道你的存储过程只是删除了记录

我有一个存储过程来更新记录,在运行它之后,我使用LinqToSql删除记录。我知道这很奇怪,但我只是想测试datacontext的智能性,了解它是如何工作的

由于datacontext缓存结果,因此可以记录通过它进行的任何更改,但现在我使用存储过程来更新某些内容,它不会知道。所以,当我试图删除它时,会出现一个异常“Row not found或changed”


如何告诉datacontext我更新了什么?如果我可以这样做,问题就会解决。

我想我遗漏了一些东西,但是如果你知道你的存储过程只是删除了记录,那么为什么还要在事后触摸Linq2Sql呢?DataContext不会神奇地知道删除操作。

您可以使用DataContext Refresh()方法传入System.Data.Linq.RefreshMode枚举;下面是一个例子:

NorthWindDataContext context = new NorthwindDataContext();
context.Refresh(RefreshMode.KeepChanges);
澄清:
这个http://msdn.microsoft.com/en-us/library/system.data.linq.refreshmode.aspx“>刷新模式枚举有3个值:

  • 保持变化
  • 保持当前值
  • 覆盖当前值

  • 此处使用的版本(KeepChanges)强制刷新方法保留修改后的值,并用数据库中的值更新其他未修改的值。

    抱歉,我没有说明我的情况。我存储的进程不知道下一步要做什么,但我知道我的sp已经更新了数据库中的某些内容,所以在运行sp后,我只想告诉datacontext我更新了一些内容请同步我的更改。在存储过程执行并删除您的记录后,您对DataContext做了什么?您可以发布更多详细信息吗?有一点我的sp不会删除记录,只是更新了一些内容。例如,我使用dc.sp_NAME更新了一些内容,然后我可以通过LingToSql之类的工具删除刚刚更新的记录var item=dc.TableName.where(p=>p.Id==Id).First();dc.TableName.deleteosubmit(item);dc.SubmitChanges();只要dc执行SubmitChanges,就会抛出异常“Row not found或change“。因此,我只想在运行sp后和取出项目通知dc之前插入一些内容。我已进行了此类更改,请更新您自己2因为我的dc在单个web请求期间共享,因此我想,我可以在运行sp后创建新的datacontext并处理旧的datacontext。因此,下一个操作或请求将开始使用新的datacontext,以便新的datacontext知道我所做的更改,因为这是在我的更改之后。如果您运行Linq“查询”代码:var item=dc.TableName.Where(p=>p.Id==Id)。首先()在执行SP之后,您应该会没事。如果在运行SP之前执行,则是,DataContext不知道更改。您必须创建一个新的DataContext,或者可能在Linq2Sql中内置了一个方法来通知DataContext重新加载,但不幸的是,我对它一无所知。