J'utilise Visual Studio 2010 avec .NET 4 et Entity Framework 4. Je travaille avec les classes POCO et non avec le générateur EF4. Je dois remplacer les méthodes Equals()
et GetHashCode()
, mais cela ne fonctionne pas vraiment. Je pensais que c'était quelque chose que tout le monde fait, mais je ne trouve rien sur le problème en ligne. Quand j'écris mes propres classes et la méthode Equals
, j'utilise Equals()
des propriétés, qui doivent être chargées par EF à remplir. Comme ceci:Entity Framework 4 écraser Equals et GetHashCode d'une propriété de classe
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();
}
}
Ce code ne fonctionne pas. Les problèmes sont dans Equals
et GetHashCode
où j'essaye d'obtenir HashCode
ou Equal
de ItemType
. Chaque fois, j'obtiens une exception NullRefernceException si j'essaie d'obtenir des données par Linq2Entites.
Une façon sale de le réparer est de capturer le NullReferenceException et le retour false
(par Equals) et retour base.GetHashCode()
(par GethashCode
), mais je l'espère, il y a une meilleure façon de résoudre ce problème.
J'ai écrit un petit projet de test, avec SQL Script pour le domaine DB et POCO, le fichier EDMX et la méthode principale de test de console. Vous pouvez le télécharger ici: Download
Le chargement paresseux fonctionne, si je supprime Equals/GetHashCode ou attrape l'exception NullReferenceException – Zhok