C# 实体框架按预定义顺序更新行版本
我使用的是C#、EF和SQL Server,很少有具有父子关系的表。有超过2个,但在这个例子中,为了简单起见,我将只使用2个 桌面书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
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”。所以比较不是问题。。至于订购,我也倾向于不依赖它。所以我认为这种方法是不行的。谢谢