NHibernate: как определять равенство транзиентного и персистентного объектов?

Есть классы, унаследованные от
public abstract class DomainObject
{
        public int Id { get; private set; } // суррогатный id для базы
}

Объекты этих классов приходят по сети и сохраняются в базу, тем самым получая Id и становясь персистентными.
Проблема в том, что объекты могут приходить одинаковыми с точки зрения бизнес-ключей, но разными с точки зрения hibernate (один из них может уже лежать в базе и иметь id, а второй - только-только прийти по сети).

Как мне определить простейшим способом, лежит ли в базе такой же с точки зрения бизнес-ключей объект?

В какую сторону копал:
1. Использовать composite-id из бизнес-ключей. Тогда придется убирать суррогатный Id и вроде как могут быть проблемы при join, зато поиск по базе работает и я могу определить, что такой же объект уже в базе.
2. Использовать natural-id из бизнес-ключей вдобавок к суррогатному id. Это ничего не дало, поиск по работает только по полю id (может, nhibernate может искать по natural-id?)
3. Использовать unique-key атрибут, который вешаю на все бизнес-ключи. Ничего не дало, кроме как Exсeption при попытке вставить такой же объект, проверить же не могу.
  • Вопрос задан
  • 2479 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы