我正在使用Visual Studio 2010與.NET 4和實體框架4.我正在使用POCO類而不是EF4生成器。我需要覆蓋Equals()
和GetHashCode()
方法,但這並不奏效。我認爲這是每個人都做的事情,但我在網上找不到任何關於這個問題的信息。實體框架4覆蓋自己類屬性的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
,我嘗試從ItemType
獲得HashCode
或Equal
。每次,如果我嘗試通過Linq2Entites獲取數據,我會得到一個NullRefernceException。
一個骯髒的方式來解決它捕獲NullReferenceException異常並返回false
(由等於)並返回base.GetHashCode()
(由GethashCode
),但我希望有一個更好的辦法來解決這個問題。
我已經寫了一個測試項目,用DB和POCO域的SQL腳本,EDMX文件和控制檯測試主要方法。您可以在此處下載: Download
延遲加載工作,如果我刪除Equals/GetHashCode或捕獲NullReferenceException – Zhok 2010-06-11 07:15:10