Я использую Visual Studio 2010 с .NET 4 и Entity Framework 4. Я работаю с классами POCO, а не с генератором EF4. Мне нужно переопределить методы 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
, где я пытаюсь получить HashCode
или Equal
из ItemType
. Каждый раз, когда я пытаюсь получить данные с помощью Linq2Entites, я получаю исключение NullRefernceException.
Грязный способ исправить это - перехватить NullReferenceException и вернуть false
(по Equals) и вернуть base.GetHashCode()
(по GethashCode
), но я надеюсь, что есть лучший способ исправить эту проблему.
Я написал небольшой тестовый проект с SQL Script для БД и домена POCO, EDMX File и Console Test Main Method. Вы можете скачать это здесь:
Скачать