所以我创建了一些POCO,目前其中一个是我正在测试的集合的一部分。我正在使用MS Test,显然当我需要比较两个集合时,我将使用CollectionsAssert.AreEquivalent()。现在在我的实体中,除了所有属性之外,我还覆盖了.Equals()和.GetHashCode(),因为CollectionAssert.AreEquivalent()需要这两个属性。我的简单问题是 - 这两种方法可以存在吗?
答案 0 :(得分:0)
在重写Equals和GetHashCode时需要特别小心,因为不正确的实现可能会导致难以调试的细微错误和性能问题。如果你只是需要它们来测试更安全的方法,那就是实现你自己的接受IEqualityComparer的AreEquivalent()方法。
说过EF本身并不依赖于POCO的Equals和GetHashCode,而是使用实体的EntityKey上的等价物。
如果确实需要覆盖这些方法,则可以委托相应的EntityKey在使用实体的非EF代码中获取EF语义。然而,这种方法并不适用于所有情况,因为它只使用密钥值来建立实体身份。