Я использую Visual Studio 2010 с .NET 4 и Entity Framework 4. Я работаю с классами POCO, а не с генератором EF4. Мне нужно переопределить методы Equals()
и GetHashCode()
, но это не работает. Я думал, что это все, но я ничего не вижу в этой проблеме.Entity Framework 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
, где я пытаюсь получить HashCode
или Equal
от ItemType
. Каждый раз, когда я пытаюсь получить данные Linq2Entites, я получаю исключение NullRefernceException.
грязный способ исправить это, чтобы захватить NullReferenceException и вернуть false
(по Равным) и вернуть base.GetHashCode()
(по GethashCode
), но я надеюсь, что это лучший способ, чтобы исправить эту проблему.
Я написал небольшой тестовый проект со сценарием SQL для базы данных и домена POCO, основного метода тестирования файлов и консолей EDMX. Вы можете скачать его здесь: Download
Lazy loading works, если я удалю Equals/GetHashCode или поймаю исключение NullReferenceException – Zhok