在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选择不在会话外提交组?
答案 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();
}