Метод 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 должен получить два объекта с разными описаниями, один из которых существует в базе данных, а второй - в результате моих изменений.

Спасибо заранее за любую помощь!

0 ответов

Другие вопросы по тегам