2011-05-20 96 views
0

我有這個問題..NHibernate的許多一對一

using (var transaction = Session.BeginTransaction()) 
      { 
       var t = new Ticket(); 
       t.Title = "TestTicket"; 
       var ticketId = (Guid)Session.Save(t); 

       var pe = new ProcessExec(); 
       pe.Ticket = t; 
       Session.Save(pe); 

       var ticket = Session.Get<Ticket>(ticketId); 
       transaction.Commit(); 

       Assert.NotNull(ticket); 
       Assert.True(ticket.ProcessExecCollection.Count > 0); 
      } 

現在的問題是這一點,斷言在

Assert.True(ticket.ProcessExec.Count> 0失敗)。

但如果我這樣做

Session.Refresh(票);

只是後transaction.Commit(),永恆的工作正常。 如何告訴NHibernate,當我創建新的ProcessExec並設置其票證時,自動更新票證?

我需要這個,因爲我在事務中創建和選擇了很多東西。

請幫忙。

<class name="Domain.Model.Sdwwf.ProcessExec" table="[PROCESS_EXEC]" schema="[SDWWF]" dynamic-update="true"> 
<id name="Id" column="ID" type="Guid"> 
    <generator class="guid" /> 
</id> 
<version name="Version" column="VERSION" /> 
<many-to-one name="Ticket" column="[TICKET_ID]" cascade="save-update, persist" /> 

<class name="Domain.Model.Sdwwf.Ticket" table="[TICKET]" schema="[SDWWF]" dynamic-update="true"> 
    <id name="Id" column="ID" type="Guid"> 
     <generator class="guid" /> 
    </id> 
    <version name="Version" column="VERSION" /> 
    <bag name="ProcessExec" inverse="true" cascade="all"> 
     <key column="[TICKET_ID]" /> 
     <one-to-many class="Softworks.SDW.Domain.Model.Sdwwf.ProcessExec" /> 
    </bag> 
    <property name="Title" column="[TITLE]" /> 
</class> 
+0

什麼是ProcessExec類中票證屬性的NHibernate配置? – Osiris76 2011-05-20 13:53:20

+0

添加了Ticket和ProcessExec的配置映射 – Luka 2011-05-20 14:15:13

回答

1

發生了什麼事是,當你做ISession.Get叫你提交事務之前,該會議還沒有被刷新,因此它的實體的緩存版本。 NHibernate不像使用數據庫連接,因爲它大部分時間都很懶。只有當它絕對必須時,它纔會進入數據庫。

您可以手動刷新的實體,就像你說的,或者你可以手動執行

ticket.ProcessExecCollection.Add(new ProcessExec()); 

然後,當你保存車票,NHibernate的會級聯新建ProcessExec。從而節省您對NHibernate的第二次調用。