0

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 というメソッドをコーディングして、それを使用できるのではないかと考えていました。それは合理的なことですか。私がそれを行い、2 つのオブジェクトを比較したい場合、どうすればそれをコーディングして呼び出すことができますか?

4

1 に答える 1

2

GetHashCode と Equals は同じロジックを実装する必要があることに注意してください。つまり、等しいオブジェクトは同じハッシュ コードを持つ必要があります。これは、ハッシュ コードが Id から取得され、同等性が Id とは何の関係もない場合には当てはまりません。

1 つをオーバーライドする場合は、両方をオーバーライドする必要があります。

ドメイン内で任意のロジックを使用できますが、EF などはおそらく既定値を使用するため、一貫性を保つ必要があります。

于 2013-08-11T07:02:23.780 に答える