0


关于这个问题被标记为“重复”的注意事项:Linq 行中的问题未找到或更改不同,我的问题是关于触发“未找到或更改行”消息并正在寻求解决方案的特定场景。

此外,该问题的答案对我的问题没有用,因为我的方案已经实现了那里建议的“最小工作单元”原则。


在我的 Web 服务中,我试图将来自客户端应用程序的 LINQ to SQL 实体附加到我的 DataContext 中,如下所示:

public void Update(MyEntity myEntity)
{
    using (var context = new MyDataContext())
    {
        context.Attach(myEntity, true);
        context.SubmitChanges();
    }
}

LINQ to SQL 能够执行此操作的前提条件是 MyEntity 将属性映射到 DB 表中的 ROWVERSION 列。就我而言,我将此属性称为 RowVersion。

如果来自客户端的 MyEntity 实例将 RowVersion 设置为 null ,那么当我调用context.SubmitChanges()声明时System.Data.Linq.ChangeConflictException

未找到或更改行。

为什么会发生这种情况?无论客户端应用程序更改 RowVersion 的值,我如何才能防止这种情况发生?

我注意到的一件事是,如果我从上下文中获取“旧”实体,然后将其 RowVersion 值分配给新实体,则可以避免异常。这是正确的做法吗?为什么?

4

0 回答 0