gpt4 book ai didi

c# - NHibernate延迟加载和对象比较

转载 作者:行者123 更新时间:2023-11-30 13:59:39 24 4
gpt4 key购买 nike

配置延迟加载后,我遇到了有关对象比较的问题。我在每个域实体类中重写的 Equals 方法包含以下行:

if (obj == null || !obj.GetType().Equals(GetType()))

显然,类型比较将失败,因为 obj 是一个代理实例。我已经看到一些 NHibernate-snippets 取消代理对象并返回真实实例。但是当我强制执行域驱动设计时,我不希望在我的域层中有任何特定于 ORM 的代码。我也无法在调用方取消代理实例 [例如foo.Equals(Unproxy(bar))] 因为调用者是我的应用程序层,它也不包含任何特定于 ORM 的代码(所有 NHibernate 依赖项都由 Windsor 注入(inject))。

长话短说:是否有任何通用代码来获取真实实例?

最佳答案

解决这个问题的方法是进行强制转换:

public class Person
{
public int Id { get; set; }

public override bool Equals(object obj)
{
var person = obj as Person;

if (person == null)
{
return false;
}

return person.Id == this.Id;
}
}

转换有效是因为 proxy 继承自您的类(例如 PersonProxy : Person)

null 检查是不必要的,因为如果 obj 为 null 或不是可以转换为人的对象,则 as 转换将只返回 null。

关于c# - NHibernate延迟加载和对象比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12913528/

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