我正在使用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
但为了做到这一点,我需要确保RowVersion
表中的Book
始终在RowVersions
Pages
之前更新。
在我的EDM层中,我目前有类似的内容:
class Page
{
void OnPageChanged() //this is hooked to OnPropertyChanged
{
this.Book.UpdateDateModified(DataTime.Now);
}
}
执行此操作会导致页面首先更新,并且在事务提交后也会首先更新其RowVersion。这不是我需要的。
问题,如果我将移动OnPageChanged()
来代替处理OnPropertyChanging
事件 - 这是否可以保证一致性?是OnPropertyChanged
是否规定了EF生成的sql中更新的顺序?针对此案例的其他任何建议?
答案 0 :(得分:3)
我不认为这是可能的。我现在无法尝试,但我真的怀疑你可以比较Linq查询中的时间戳(RowVersion
)。它映射到字节数组,字节数组不可比。数据库中的操作顺序完全不受您的控制。您不能将逻辑建立在实体更新的预期顺序上。只有当您的网页和图书将通过两个不同的SaveChanges
来电保存时,您才能执行此操作。在这种情况下,您根本无法使用OnPropertyChanges
,并且必须在对网页进行任何更改之前手动处理Book
更改。