配置延迟加载后,我遇到了有关对象比较的问题。我在每个域实体类中重写的 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/