从会话中选择未保存的对象

时间:2009-09-18 12:05:15

标签: nhibernate

在mssql上使用NHibernate 2.1和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。同样,选择是否有正确的组,如果不是脚本创建组。

有时OrderCode和Alotment需要相同的组,但如果该组不存在,则脚本会创建两个组,因为secend select不会使该组脱离会话。

我知道同一个会话。有没有办法让IQuery,ICriteria或Session.Linq选择不在会话外提交组?

1 个答案:

答案 0 :(得分:0)

据我所知,如果使用会话保存或更新实体,则应在从同一会话中获取更改之前刷新或提交更改。 你不能像这样使用组对象引用吗?

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();
}