我解决了导致此问题的问题。
它还解析为复合 ID!
在项目的早期,Nhibernate 警告说我没有覆盖 Equals 和 GetHashCode,为了规避大量代码更改并促进代码重用,我创建了一个 CompositeBaseEntity 类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Case.Infrastructure
{
public class BaseCompositeEntity : BaseEntity
{
public override int GetHashCode()
{
return base.GetHashCode();
}
public override bool Equals(object obj)
{
return base.Equals(obj);
}
}
}
这堂课,把 Nhibernate 告诉我要避免的东西放回原处!由于有两个键来比较相等性,我们必须重写 Equals 和 GetHashCode() 方法,使其类似于:
public override bool Equals(object obj)
{
if (obj == null)
return false;
var t = obj as ClientMatterEntity;
if (t == null)
return false;
if (AccountNumber== t.ClientAcconuntNumber && CaseNumber == t.CaseNumber)
return true;
return false;
}
通过这种方式,Nhibernate 确切地知道应该如何进行比较,然后知道它是否在一级缓存中有那个对象(它会,正如我们指定的 fetch 那样)。
更多信息可以在这里找到:http:
//nhforge.org/blogs/nhibernate/archive/2010/07/01/nhibernate-and-composite-keys.aspx