1

所以我创建了一些 POCO,目前其中一个是我正在测试的集合的一部分。我正在使用 MS Test,显然当我需要比较两个集合时,我将使用 CollectionsAssert.AreEquivalent()。现在在我的实体中,除了所有属性之外,我还覆盖了 .Equals() 和 .GetHashCode(),因为 CollectionAssert.AreEquivalent() 需要这两个属性。我的简单问题是——这两种方法都可以吗?

4

1 回答 1

0

覆盖 Equals 和 GetHashCode 时需要特别小心,因为不正确的实现可能会导致难以调试的细微错误和性能问题。如果您只需要它们来测试更安全的方法,那就是实现您自己的接受 IEqualityComparer 的 AreEquivalent() 方法。

话虽如此,EF 本身并不依赖于 POCO 的 Equals 和 GetHashCode,而是使用实体的 EntityKey 上的等价物。

如果您确实需要覆盖这些方法,您可以委托给相应的 EntityKey 以在使用实体的非 EF 代码中获取 EF 语义。然而,这种方法并不适用于所有场景,因为它只使用键值来建立实体身份。

于 2012-09-17T21:03:56.203 回答