Я разработал проблему, которая вызывает эту проблему.
Он также разделяет на составные 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);
}
}
}
Этот класс, возвращает на место то, что Нюбернэйт говорил мне избегать! Как есть два ключа для сравнения равенства против, мы должны переопределить Равно & 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 точно знает, как сравнение должно быть сделано, и тогда знает, что если он имеет этот объект в кеше первого уровня (который он будет, как мы указали, выборку).
Более подробную информацию можно найти здесь: http://nhforge.org/blogs/nhibernate/archive/2010/07/01/nhibernate-and-composite-keys.aspx
Говорить, что моя реализация равных значений «не велика» - все хорошо и хорошо, но могли бы вы предложить предложения по ее улучшению? Я отредактировал свой ответ, чтобы упомянуть GetHashCode() –