Ошибка говорит вам о проблеме, и это не относится к вашим сущностям или вашему отображению.
У вас есть два или более открытых сеансов, и вы пытаетесь связать некоторый объект с более чем одним из них.
update
В ответ на обновленный код я вижу, что у вас есть метод, который принимает сущность в качестве параметра, создает новую фабрику сеансов, создает новый сеанс, а затем пытаетсяудалите сущность.
Здесь есть некоторые проблемы:
- Фабрику сеанса следует создавать только один раз.Когда-либо.Это дорогостоящая операция.
- Вы передаете сущность методу
Delete()
.Откуда эта сущность?Вы явно уже загрузили его в другое место вашего приложения, используя другой ISession
.В этом суть проблемы.Если вы не Evict()
сущность из первого ISession
(не рекомендуется), попытка манипулировать им с помощью другого ISession
броска. - Вы звоните
Flush()
, который почти никогда не должен использоваться. - Вы используете неявную транзакцию.
Вы действительно должны удалить объект с тем же ISession
, с которым он был загружен, и вы должны выполнять работу в пределахтранзакция, как это:
using(var transaction = session.BeginTransaction())
{
session.Delete(obj);
transaction.Commit();
}