2010-02-25 6 views

cevap

7

http://www.nhforge.org/doc/nh/en/index.html#manipulatingdata-exceptions

(Özel bir durum oluştuğunda sonra Oturumu floş yok)

If the ISession throws an exception you should immediately rollback the transaction, call ISession.Close() and discard the ISession instance. Certain methods of ISession will not leave the session in a consistent state.

İstisnadan sonra oturumu attınız ve yeni bir oturum başlattınız mı?

+1

istisna ben bu sorunu yaşama gitmiyorum daha atıldı sonra() Session.Clear yaparsanız, Ama bunun bir web sitesi için tüm webapp için Session'ı temizlemek için iyi bir fikir olduğunu sanmıyorum. Bu istisnai bir istisna olan tek bir kullanıcı – Omu

+1

Bir istisnadan sonra oturumu kapatmalısınız. Ekleme işlemini yapmadan önce uygulamanızın ilk sorguya yeniden yazılmasını öneririm, böylece bir veritabanı istisnası atılmadan aynı işlevselliği elde edebilirsiniz. Uygulama seçimleriniz nedeniyle istisnai olmayan bir durumda şu anda bir istisna uyguladığınız anlaşılıyor. Ayrıca, web uygulaması başına bir oturum değil, web başına bir oturum için en iyi uygulamadır. –

1

Sen bağlamdan nesneyi kaldırmak ve böyle yaparsanız devam edebilirsiniz:

public void Save() { 
    try 
    { 
     Session.SaveOrUpdate(this); 
    } 
    catch 
    { 
     // If the object as a null identifier everything else fails. Remove from context 
     if (Session.GetIdentifier(this) == null) 
     ((SessionImpl)Session).PersistenceContext.EntityEntries.Remove(this); 
     throw; 
    } 
    }