Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架按预定义顺序更新行版本_C#_Sql Server_Entity Framework_Rowversion - Fatal编程技术网

C# 实体框架按预定义顺序更新行版本

C# 实体框架按预定义顺序更新行版本,c#,sql-server,entity-framework,rowversion,C#,Sql Server,Entity Framework,Rowversion,我使用的是C#、EF和SQL Server,很少有具有父子关系的表。有超过2个,但在这个例子中,为了简单起见,我将只使用2个 桌面书 Id DateModified RowVersion 表格页面 Id BookId - this is foreign key to Book.Id RowVersion 当任何页面更新时,我需要更新Book表中的DateModified 我们使用RowVersion来跟踪更改,因为它具有独特的价值,我希望通过执行以下操作始终能够获得每本书的最新更改 SELE

我使用的是C#、EF和SQL Server,很少有具有父子关系的表。有超过2个,但在这个例子中,为了简单起见,我将只使用2个

桌面书

Id
DateModified
RowVersion
表格页面

Id
BookId - this is foreign key to Book.Id
RowVersion
当任何页面更新时,我需要更新Book表中的
DateModified

我们使用
RowVersion
来跟踪更改,因为它具有独特的价值,我希望通过执行以下操作始终能够获得每本书的最新更改

SELECT * FROM Page
WHERE RowVersion > Book.RowVersion
但为了做到这一点,我需要确保
书籍
中的
行版本
表总是在
页面
中的
行版本
之前更新

在我的EDM层中,我目前有如下内容:

class Page
{
  void OnPageChanged() //this is hooked to OnPropertyChanged
  {
     this.Book.UpdateDateModified(DataTime.Now);
  }
}
这样做会导致页面首先更新,并且在事务提交后,其行版本也会首先更新。这不是我需要的


问题,如果我将移动
OnPageChanged()
以处理
OnPropertyChanging
事件-这是否保证一致性?是不是
OnPropertyChanged
决定了更新在EF生成的sql中发生的顺序?对这个案子还有其他建议吗?

我认为这是不可能的。我现在无法尝试,但我确实怀疑您是否可以在Linq查询中比较时间戳(
RowVersion
)。它映射到字节数组,字节数组不可比较。数据库中的操作顺序完全不受您的控制。您不能将逻辑基于实体更新的预期顺序。只有通过两个不同的
SaveChanges
调用保存页面和书籍时,才能执行此操作。在这种情况下,您根本不能使用
OnPropertyChanges
,在对页面进行任何更改之前,您必须手动处理
Book
更改。

我有一个计算列,可以将“binary”转换为“bigint”。所以比较不是问题。。至于订购,我也倾向于不依赖它。所以我认为这种方法是不行的。谢谢