2012-09-17 50 views
-1

我有一個問題,類應該:發出幾張發票,顯示/更新進度欄並保存到nhibernate類的一些值。 下面的代碼顯示了調用WyemitujFakture並顯示進度條窗口的函數。Nhibernate無法將新項目保存到postgresql數據庫

   private void BtOK_Click(object sender, EventArgs e) 
       { 
       lista.Add(2); 
       lista.Add(8); 
       liczbaWygenerowach = 0; 
       ilosc_zrobionych = 0; 
       fpb = new FrmProgressBar("Emisja faktur potwierdzonych, proszę czekać..."); 
       fpb.Show(); 
       Application.DoEvents(); 
       WyemitujFakture(lista); 
       fpb.Close(); 
       } 

Windows窗體顯示進度條和發票生成但無法保存nHibernate類的值。它看起來像線:fs.Save();和Session.Flush();不工作。你有任何想法如何解決這個問題?

private void WyemitujFakture(List<int> lista) 
{ 
foreach (int knh_id in lista) 
    { 
try 
{ 
    if (luk.Count > 0) 
    { 
     FakturySprzedazy fs = new FakturySprzedazy(); 
     fs.FKS_AKCYZA = false; 
     fs.FKS_CZY_KLON = false; 
     fs.FKS_DATA_DOW_KS = Convert.ToDateTime(MTBDataZapisuDoFK.Text); 
     fs.FKS_DATA_FAKTURY = Convert.ToDateTime(MTBDataFaktury.Text); 
     fs.FKS_DATA_SPRZEDAZY = Convert.ToDateTime(MTBDataSprzedazy.Text); 
     fs.Save(); 
     Session.Flush(); 
     liczbaWygenerowach++; 
    } 

} 
catch (Exception ex) 
{ 
    MessageBox.Show("Nie mozna wyemitowac faktury dla kontrahenta o id = " + knh_id.ToString() + " " + ex.Message); 
} 
ilosc_zrobionych++; 

fpb.PBStan.Value = (int)((100 * ilosc_zrobionych)/liczbaKontrahentow); 
Application.DoEvents(); 
} 
} 

非常感謝您的幫助提前

+0

錯誤消息/異常的確切文本? PostgreSQL版本?你是否檢查過PostgreSQL錯誤日誌,看看有沒有什麼東西出現? –

回答

1

親愛的克雷格·林格,

感謝ü您的快速反應。我沒有任何錯誤消息,並且我擁有版本9,1的postgresql。

我已經找到解決方案:)

功能「WyemitujFakture」爲主題,因此hasnot已取得了SessionScope對象,它在主線程創建的。我添加到功能WyemitujFakture 4行:

SessionScope session2 = new SessionScope(FlushAction.Never); 
        fs.Save(); 
        session2.Flush(); 
if (session2 != null) session2.Dispose(); 

以上4行已解決問題。 下面我連着整個函數正常工作:

private void WyemitujFakture(List<int> lista) 
{ 
foreach (int knh_id in lista) 
{ 
try 
{ 
if (luk.Count > 0) 
{ 
    FakturySprzedazy fs = new FakturySprzedazy(); 
    fs.FKS_AKCYZA = false; 
    fs.FKS_CZY_KLON = false; 
    fs.FKS_DATA_DOW_KS = Convert.ToDateTime(MTBDataZapisuDoFK.Text); 
    fs.FKS_DATA_FAKTURY = Convert.ToDateTime(MTBDataFaktury.Text); 
    fs.FKS_DATA_SPRZEDAZY = Convert.ToDateTime(MTBDataSprzedazy.Text); 
    SessionScope session2 = new SessionScope(FlushAction.Never); 
        fs.Save(); 
        session2.Flush(); 
    session2.Flush(); 


    if (session2 != null) session2.Dispose(); 
    Session.Flush(); 
    liczbaWygenerowach++; 
} 

} 
catch (Exception ex) 
{ 
MessageBox.Show("Nie mozna wyemitowac faktury dla kontrahenta o id = " + knh_id.ToString() + " " + ex.Message); 
} 
ilosc_zrobionych++; 

fpb.PBStan.Value = (int)((100 * ilosc_zrobionych)/liczbaKontrahentow); 
Application.DoEvents(); 
} 
} 

感謝您的參與!!!!

祝你好運!