我正在使用Entity Framework 5,我试图覆盖.Equals和.GetHashCode
public class Students {
public int PersonId { get; set; }
public string Name { get; set; }
public int Age {get; set;}
public override bool Equals(object obj)
{
return this.Equals(obj as Students);
}
public bool Equals(Students other)
{
if (other == null)
return false;
return this.Age.Equals(other.Age) &&
(
this.Name == other.Name ||
this.Name != null &&
this.Name.Equals(other.Name)
);
}
public override int GetHashCode()
{
return PersonId.GetHashCode();
}
}
然而,我的非常简单的方法似乎不起作用,我从EF那里得到错误说:角色的变化冲突
我认为这是由于EF进行比较的方式。
有没有办法可以提供我自己的方法并以与.Equals相同的方式调用它?我想也许我可以编写一个名为.Same的方法并使用它。这是否合理。如果我这样做并且我想比较两个对象那么我怎么能编码并调用它?
答案 0 :(得分:2)
请注意 - GetHashCode和Equals应该实现相同的逻辑。即 - 相等的对象应具有相同的哈希码。这不是这里的情况,其中哈希码来自Id,而相等与Id无关。
如果覆盖一个,则必须覆盖它们。
您可以在域中使用您希望的任何逻辑,但EF和其他人可能会使用默认值,您必须保持它们一致。