2010-06-10 42 views
0

我是新手開發商....傳承 - 無法初始化代理 - 沒有會話

我真的需要幫助,在現在... 我只是得到在.net等 開始時與NHibernate的事我學習繼承並嘗試它......它讓我感到困惑......爲什麼我得到這樣的錯誤:

正在初始化[AP.Core.Domain.AccountPayable.APInvoice#API03/04/2010/001] -Could不初始化代理 - 沒有會話。

這是我的xml:

<class xmlns="urn:nhibernate-mapping-2.2" mutable="true" name="AP.Core.Domain.AccountPayable.APAdjustment, AP.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="APAdjustment"> 
    <id name="AdjustmentNumber" type="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <column name="AdjustmentNumber" length="17" /> 
     <generator class="assigned" /> 
    </id> 
    <property name="Amount" type="System.Decimal, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <column name="Amount" /> 
    </property> 
    <property name="TransactionDate" type="System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <column name="TransactionDate" /> 
    </property> 
    <many-to-one class="AP.Core.Domain.AccountPayable.APInvoice, AP.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" lazy="proxy" name="PurchaseInvoice"> 
     <column name="PurchaseInvoice_id" not-null="true" /> 
    </many-to-one> 
    <joined-subclass name="AP.Core.Domain.AccountPayable.APCreditAdjustment, AP.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" lazy="true" table="APCreditAdjustment"> 
     <key> 
     <column name="APAdjustment_id" /> 
     </key> 
    </joined-subclass> 
    </class> 
</hibernate-mapping> 

,這是繼承類:

父類 - >

public class APAdjustment 
     { 
     #region :FIELD 
     private string adjustmentNumber; 
     private decimal amount; 
     private DateTime transactionDate; 
     private APInvoice purchaseInvoice; 

子類 - >

public class APCreditAdjustment : APAdjustment { 

    public APCreditAdjustment(){ 

,這我的數據訪問:

public IList<APAdjustment> GetByNameAll() 
{ 
    ICriteria criteria = Nhibernatesession.CreateCriteria(typeof(APAdjustment)); 
    return criteria.List<APAdjustment>() ; 
} 

我的問題是:

  1. 當我加載與GridView的數據......它 工作......但我的屬性更改爲 autogenerate =「true」...我缺少 「PurchaseInvoice」字段...和我 更改爲手動綁定,它 works..when我編輯gridview ...我得到這個 錯誤...

    初始化[AP.Core.Domain.AccountPayable.APInvoice#API03/04/2010/001] -Could 無法初始化代理 - 沒有會話

  2. 於是我改變我的XML ...懶惰=「無代理」...它仍然 工作...但是當再次編輯...我再次得到 錯誤..並且我做「評論輸出 選定的行」到我的 協會「多對一「...我真的 的作品..但那不是我想...

可以任意人幫我...... ?? Plizz ... :(

注意:我差點忘記了, ..所以我工作到XML NHibernate的...不流利的冬眠的事情... :)

+0

我不知道哪樣品/ DOC您使用的學習NH。該映射有一些可以改進的地方。 NH使用屬性,並且這些屬性必須是虛擬的,因爲NH創建了它們的代理。我建議你把完整的代碼(不只是一個部分)和會看到。 – Marcote 2010-06-10 01:37:52

+0

對不起...我忘了告訴你...我的所有代碼已成爲虛擬財產...沒有虛擬...我的代碼無法運行... 這是我的代碼的一部分: 公共虛擬字符串AdjustmentNumber { get {return adjustmentNumber; } set {adjustNumber = value; } } 公共虛擬小數金額 { get {return amount; } set {amount = value; } } public virtual DateTime TransactionDate { get {return transactionDate; } set {transactionDate = value; } } public virtual APInvoice PurchaseInvoice { get {return purchaseInvoice; } set {purchaseInvoice = value; }} 如何 – Ninu 2010-06-10 07:52:26

+0

你的會話處理 - 這種情況發生時,通常如果NHibernate的試圖延遲加載的屬性和會話消失了..所以,請給我們介紹一下Nhibernatesession – bernhardrusch 2010-06-10 08:14:35

回答

0

在所有的相關項目的開放,把這在你的代碼:

未找到=「忽略」

+0

工作!但爲什麼?? – Cognitronic 2013-01-05 23:58:28

+0

不僅是偶然提供的糟糕且可疑的答案,您沒有提供任何有關信息。在這裏尋找更多的信息:http://stackoverflow.com/questions/13726668/nhibernate-force-not-found-ignore-to-not-execute-an-extra-select – wegginho 2013-10-28 17:45:47

0

這個異常通常意味着你是一個試圖訪問一個惰性加載的屬性,當會話關閉(我看到在映射文件中爲lazy="proxy")。我建議您在訪問「PurchaseInvoice」屬性前先放置一個斷點,並檢查您的Session.IsOpen是否存在您的APAdjustment實例所屬的會話。

+0

是啊...看起來像我的會議是空的...我怎麼能解決它??我喜歡這個... ISession會議=空; ICriteria criteria = null; 布爾_check = NHibernateSession.IsOpen; 嘗試 session = NHibernateSession.SessionFactory.GetCurrentSession(); criteria = NHibernateSession。個createCriteria(typeof運算(APAdjustment)); (ex.GetBaseException());}};}};}}; } 還是我在我的代碼錯了? – Ninu 2010-06-11 00:19:01

0

如果會話爲空,那麼您現在面臨完全不同的問題(如果您的會話爲空,您不能獲得以前的錯誤,我相信您已更改了代碼中的某些內容) 會話管理需要會話管理器和會話上下文類(請參見nHibernate文檔here) 我建議您簡化一下您的設計,並且不要引入會話管理器,但您完全理解其含義(儘管會話管理器對於許多人來說是強烈推薦的實踐項目)。只需打開一個新的會話,如

ISession session = YouSessionFactory.OpenSession() 
ICriteria criteria = session.CreateCriteria(typeof(APAdjustment)); 

並繼續擺脫SessionManager(僅用於測試目的)。如果您使用延遲加載,會議必須在你的訪問延遲加載特性,可能是因爲你期望

問候你的會話管理器不工作,馬可

相關問題