Выберите несохраненный объект из сеанса - PullRequest
0 голосов
/ 18 сентября 2009

Использование NHibernate 2.1 на mssql с C #.

У меня есть 2 различных класса, которые используют объект "группа".

<class name="OrderCode" table="OrderCode" polymorphism="explicit">

<id name="Id" column="ID">
  <generator class="native" />
</id>
...
<many-to-one class="Group" name="Group" column="GRUPPE" cascade="all" />
...

и

<class name="Alotment" table="Alotment">

<id name="Id" column="ID">
  <generator class="native" />
</id>
...
<many-to-one class="Group" name="Group" column="GRUPPE" cascade="all" />
...

Сценарий импорта теперь сначала создает код заказа и выбирает группу. Если группа не существует, она создает новую. Позже в том же сценарии я создаю выделение. Таким же образом, выберите, если есть правильная группа, если не сценарий создания группы.

Иногда OrderCode и Alotment нуждаются в одной и той же группе, но если группа не существует, сценарий создает две группы, в результате чего выбор secend не выводит группу из сеанса.

Я знаю, что это тот же сеанс. Есть ли способ разрешить IQuery, ICriteria или Session.Linq выбирать не фиксировать группы вне сессии?

1 Ответ

0 голосов
/ 21 сентября 2009

Насколько я знаю, если вы сохраняете или обновляете объект, используя сеанс, вы должны очистить или зафиксировать свои изменения, прежде чем вернуть его из того же сеанса. Вы не можете использовать ссылку на объект группы, как это?

using(var session=SessionFactory.OpenSession())
{
var group=(Group)session.CreateQuery(group_query_string).UniqueResult;
if(group==null)
{
group=new Group();
session.SaveOrUpdate(group);
}
...
var orderCode=new OrderCode{Group=group};
session.SaveOrUpdate(orderCode);
...
// and later in your code

var alotment=new Alotment{Group=group};
session.SaveOrUpdate(alotment);
....

session.Flush();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...