2009-09-18 37 views
0

在mssql上用C#使用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並選擇該組,如果不存在該組它使一個新的。後來在同一個腳本中我創建了這個分支。同樣的方法,選擇是否有合適的組,如果不是腳本創建組。

有時OrderCode和Alotment需要相同的組,但如果該組不存在,則該腳本創建兩個組,導致secend select不會將該組從會話中取出。

我知道它的同一屆會議。有沒有辦法讓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 2009-09-22 07:13:00