2

我正在使用 C#、EF 和 SQL Server,并且很少有具有父子关系的表。有超过 2 个,但在此示例中,为简单起见,我将仅使用 2 个。

表书

Id
DateModified
RowVersion

表页

Id
BookId - this is foreign key to Book.Id
RowVersion

当任何页面/页面更新时,我需要DateModified在 Book 表中更新。

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

SELECT * FROM Page
WHERE RowVersion > Book.RowVersion

但为了做到这一点,我需要确保RowVersioninBook表总是在RowVersionsin之前更新Pages

在我的 EDM 层中,我目前有这样的东西:

class Page
{
  void OnPageChanged() //this is hooked to OnPropertyChanged
  {
     this.Book.UpdateDateModified(DataTime.Now);
  }
}

这样做会导致页面首先更新,并且在事务提交后它的 RowVersion 也会首先更新。这不是我需要的。

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

4

1 回答 1

3

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

于 2011-11-11T09:48:17.327 回答