2010-06-11 3 views
4

Я использую 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

ответ

0

Вы используете чистые классы POCO без генерации прокси. В этом случае ленивая загрузка не поддерживается, и вам придется создавать методы репозитория для загрузки связанных объектов самостоятельно. Вот почему ваш объект ItemType имеет значение NULL (и всегда будет).

Если вы хотите ленивую загрузку, вы можете использовать генератор EF для создания классов POCO, которые поддерживают ленивую загрузку.

+0

Lazy loading works, если я удалю Equals/GetHashCode или поймаю исключение NullReferenceException – Zhok

Смежные вопросы