gpt4 book ai didi

c# - Entity Framework 4 覆盖自己的类属性的 Equals 和 GetHashCode

转载 作者:行者123 更新时间:2023-11-30 13:05:47 25 4
gpt4 key购买 nike

我将 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();
}
}

该代码无效。问题在EqualsGetHashCode我尝试获取 HashCode 的地方或 Equal来自 ItemType .每次,如果我尝试通过 Linq2Entites 获取数据,我都会收到 NullRefernceException。

修复它的一种肮脏方法是捕获 NullReferenceException 并返回 false (按等于)并返回 base.GetHashCode() (by GethashCode ),但我希望有更好的方法来解决这个问题。

我已经编写了一个小测试项目,其中包含用于数据库和 POCO 域的 SQL 脚本、EDMX 文件和控制台测试主要方法。你可以在这里下载: Download

最佳答案

您正在使用没有代理生成的纯 POCO 类。在这种情况下,不支持延迟加载,您必须自己创建存储库方法来加载相关实体。这就是为什么您的 ItemType 实体为空(并且永远如此)。

如果要延迟加载,可以使用EF生成器构建支持延迟加载的POCO类。

关于c# - Entity Framework 4 覆盖自己的类属性的 Equals 和 GetHashCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3020729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com