如何让Linq-to-SQL刷新其数据库记录的本地副本?

Gar*_*ill 6 linq-to-sql

假设我的数据库中有一个Orders表,并且VS2008"Linq to SQL Classes"设计器生成了相应的模型类.假设我的ProcessOrder数据库中还有一个存储过程(),用于对订单记录进行一些处理.

如果我执行以下操作:

var order = dataContext.Orders.Where(o => o.id == orderId).First();

// More code here

dataContext.ProcessOrder(orderId);

order.Status = "PROCESSED";

dataContext.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)

...如果ProcessOrder存储过程修改了订单(当然很可能),我会得到并发冲突,因为L2S会检测到订单记录已经改变,并且无法将更改提交给该订单.

这一切都很合理,但是如果我在调用存储过程后更新订单记录呢?如何告诉L2S忘记其缓存副本并从数据库中刷新它?

Kla*_*sen 16

您可以使用Refresh数据上下文中的方法来执行此操作,如下所示:

DataContext.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues,
                    DataContext.Orders);
Run Code Online (Sandbox Code Playgroud)

  • 但它不会更新映射到另一个表的关联导航集合属性。它只更新映射到当前实体指向的表列的属性。有没有办法解决这个问题? (2认同)