powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / illegal attempt to associate a collection with two open sessions nhibernate
4 сообщений из 4, страница 1 из 1
illegal attempt to associate a collection with two open sessions nhibernate
    #37577730
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть класс Employee, в котором есть поле-коллекция Projects. считывается все нормально

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public virtual Entity GetEntity()
        {
            ISession session = DAO.OpenSession();//сессия открывается только раз и нигде явно не закрывается

            ICriteria crit = session.CreateCriteria(GetType());
            crit.Add(Expression.Eq("Id", Id));

            
            return (Entity)crit.List()[0];
        }





но при попытке сохранения

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
protected virtual void innerUpdateEntity()
        {
            ISession session = DAO.OpenSession();

            using (ITransaction transaction = session.BeginTransaction())
            {
                session.Update(this);
                transaction.Commit();
            }

        }



ексепшн "illegal attempt to associate a collection with two open sessions nhibernate"

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true">
  <class name="MoveEmployee.BLL.Employee, MoveEmployee.BLL" lazy="true" optimistic-lock="version">
    <id name="Id">
      <generator class="sequence">
        <param name="sequence">SEQ_ID</param>
      </generator>
    </id>

    
    <set name="Projects" table="Project">
      <key column="id_employee" />
      <one-to-many class="MoveEmployee.BLL.Project, MoveEmployee.BLL" />
    </set>
                  
    
  </class>



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true">
  

  <class name="MoveEmployee.BLL.Project, MoveEmployee.BLL" table="Project" lazy="true">
    <id name="Id" column="Id">
      <generator class="sequence">
        <param name="sequence">SEQ_ID</param>
      </generator>
    </id>
    <property name="Name" column="Name" />
    <property name="IdEmployee" column="Id_Employee" />
    
  </class>
  
</hibernate-mapping>
  
</hibernate-mapping>



как это победить?

списибо
...
Рейтинг: 0 / 0
illegal attempt to associate a collection with two open sessions nhibernate
    #37577793
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawкак это победить?

1. Не открывать вторую сессию.
2. Чтобы было проще выполнить п.1, выкиньте ваш DAO, и используйте непосредственно ISession.
...
Рейтинг: 0 / 0
illegal attempt to associate a collection with two open sessions nhibernate
    #37578444
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в догонку еще вопрос - сессии закрывать надо каждый раз после открытия, или как-то иначе надо?
...
Рейтинг: 0 / 0
illegal attempt to associate a collection with two open sessions nhibernate
    #37578527
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmaw,

Лучше всего думать о сессии, как о шаблоне Unit of Work. Открыли сессию, сделали какую-то работу, зафиксировали транзакцию, закрыли сессию.

Скажем, если вы редактируете справочник клиента - то открываете одну сессию на каждую форму редактора, и по завершения редактирования закрываете (Session-Per-Form).
Если речь о веб-приложении, то хорошим тоном считается шаблон Session-Per-Request.

Это наиболее оптимальные варианты использования сессии.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / illegal attempt to associate a collection with two open sessions nhibernate
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]