Метод equals получает один и тот же экземпляр объектов дважды после совершения транзакции [проблема с кешем nHibernate]
У меня проблема с сохранением изменений в одном столбце в базе данных. Насколько я заметил, эта проблема возникает только в том случае, когда я пытаюсь внести некоторые изменения в объект в области транзакции. Пример кода ниже:
try
{
tx =
dao.GetTransaction(TransactionPropagation.Required,IsolationLevel.ReadCommitted,false);
var obj = dao.Get<TemplateObj>(1);
obj.Description = "new_external";
dao.SaveOrUpdate(obj);
dao.Commit(tx);
}
TemplateObj содержит объект класса TemplateObj2, а класс TemplateObj2 реализует интерфейс IUserType. После внесения изменений в свойство description свойство, реализующее интерфейс IUserType, обновляется автоматически. Проблемы начинаются после принятия моих изменений, вызывается функция Equal для TemplateObj2:
public new bool Equals(object x, object y)
{
if (ReferenceEquals(null, x) && ReferenceEquals(null, y))
{
return true;
}
...
}
Что я заметил, что оба параметра имеют Описание, равное значению после моих изменений ("new_external"). Они имеют одинаковое содержание, но их ссылки не совпадают. Проблема в том, что после этого сравнения (объекты совпадают, поэтому nHibernate не видит изменений), обновление этого столбца пропускается в базе данных.
До сих пор я узнал, что у меня есть некоторые кэшированные данные. Если я попытаюсь снова вызвать Get или Load тот же объект после изменения Description, но перед фиксацией я получу объект с измененными описаниями.
Любые идеи или советы, как решить эту проблему? Как я понимаю, метод Equals должен получить два объекта с разными описаниями, один из которых существует в базе данных, а второй - в результате моих изменений.
Спасибо заранее за любую помощь!