2009-09-18 1 views
0

C#でmssqlでNHibernate 2.1を使用しています。セーブされていないオブジェクトをセッション外に選択します。

私は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は、同じグループが必要ですが、存在しdosen'tグループは、スクリプトは2つのグループはセッションオフグループを得ることはありません選択secend原因作成した場合。

私は同じセッションを知っています。 IQuery、ICriteria、またはSession.Linqがセッションからグループをコミットしないようにする方法はありますか?限り、あなたが同じセッションからそれを取り戻す前に変更をフラッシュまたはコミットする必要があるセッションを使用してエンティティを保存したり、更新した場合、私が知っているよう

答えて

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

私はグループオブジェクトを参照しますが、セッションから選択するとより良いと思います。 – Zhok

関連する問題