我正在使用带有 .NET 4 和 Entity Framework 4 的 Visual Studio 2010。我正在使用 POCO 类而不是 EF4 生成器。我需要重写Equals()
andGetHashCode()
方法,但这并没有真正起作用。我认为这是每个人都会做的事情,但我在网上找不到任何关于这个问题的信息。
当我编写自己的类和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
或从哪里得到。每次,如果我尝试通过 Linq2Entites 获取数据,我都会收到 NullRefernceException。GetHashCode
HashCode
Equal
ItemType
修复它的一种肮脏方法是捕获 NullReferenceException 并返回false
(通过 Equals)并返回base.GetHashCode()
(通过GethashCode
),但我希望有更好的方法来解决这个问题。
我编写了一个小测试项目,其中包含用于 DB 和 POCO 域的 SQL 脚本、EDMX 文件和控制台测试主要方法。你可以在这里下载: 下载