.NET 4 および Entity Framework 4 で Visual Studio 2010 を使用しています。EF4 ジェネレーターではなく、POCO クラスを使用しています。Equals()
メソッドとメソッドをオーバーライドする必要がありますが、GetHashCode()
実際には機能しません。誰もがすることだと思いましたが、オンラインで問題について何も見つかりません。
独自のクラスとEquals
メソッドを作成するときはEquals()
、プロパティを使用します。これらは、EF によって読み込まれて埋められる必要があります。このような:
public class Item
{
public virtual int Id { get; set; }
public virtual String Name { get; set; }
public virtual List<UserItem> UserItems { get; set; }
public virtual ItemType ItemType { get; set; }
public override bool Equals(object obj)
{
Item item = obj as Item;
if (obj == null)
{
return false;
}
return item.Name.Equals(this.Name)
&& item.ItemType.Equals(this.ItemType);
}
public override int GetHashCode()
{
return this.Name.GetHashCode() ^ this.ItemType.GetHashCode();
}
}
そのコードは機能しません。問題は にEquals
あり、取得しようとする場所または取得GetHashCode
しようとする場所にあります。Linq2Entites でデータを取得しようとすると、毎回 NullRefernceException が発生します。HashCode
Equal
ItemType
これを修正する汚い方法は、NullReferenceException をキャプチャしてfalse
(Equals によって) 返され、 base.GetHashCode()
(によってGethashCode
) 返されることですが、この問題を修正するためのより良い方法があることを願っています。
DB および POCO ドメイン用の SQL スクリプト、EDMX ファイル、およびコンソール テストのメイン メソッドを使用して、小さなテスト プロジェクトを作成しました。ここからダウンロードできます: ダウンロード