SORU
4 EYLÜL 2008, PERŞEMBE


Ve neden?onu Nereye arabiriminin İSession Flush:

Beni iyice karıştı şeylerden biri* *6, session.Close ile birlikte session.Flushkullanılmasıdır.

Bazen session.Close çalışır, örneğin, ben gereken tüm değişiklikleri kaydeder. Bir işlem var da dolaylı olarak kullanmam lazım biliyorum, ya da birkaç ile bir iş birimidir, eğer bir hata oluşursa geri almak için bir seçim yapmak için/güncellemeler/siler oluşturur.

Ama bazen gerçekten session.Flush arkasındaki mantık bir gece olsun. session.SaveOrUpdate() bir floş tarafından takip örnekler gördüm, ama ben Floş kaldırdığınızda zaten ince çalışır. Bazen zengin deyimi oturum zaman aşımına uğradı diyerek hata ile karşılaştım ve kaldırılması hata rastlamasaydım emin yaptı.

Herkes bir Floş kullanmak için nereye iyi bir kılavuz var mı? Bu Arabiriminin belgeleri kontrol ettim, ama yine de basit bir cevap bulamıyorum.

CEVAP
4 EYLÜL 2008, PERŞEMBE


Kısaca:

  1. Her zaman hareketleri kullanın
  2. Close(), ISession using bir ifadeye ya . bir aramalarınızı sarmak yerine kullanmayın ^strong>senin İSession ömrü başka bir yerde yönetmek.

the documentation:

Zaman zaman ISession SQL ifadeleri nesneler bellekte tutulan devlet ile ADO.NET bağlantı durumu eşitlemek için gerekli yürütülür. Bu süreç, floş, aşağıdaki noktalarda varsayılan olarak oluşur

  • Find() Enumerable() bazı çağırmaları
  • NHibernate.ITransaction.Commit()
  • ISession.Flush()

SQL deyimlerini, aşağıdaki sırada düzenlenir

  1. tüm varlık, karşılık gelen nesneler kaydedilmiş aynı sırada ISession.Save() kullanarak eklemeler
  2. tüm varlık güncellemeler
  3. tüm koleksiyonu silme
  4. tüm koleksiyon öğesi silme, güncellemeler ve eklemeler
  5. tüm koleksiyon eklemeler
  6. tüm varlık silmeler, aynı sırada karşılık gelen nesneler ISession.Delete() kullanılarak silindi

(Bir istisna nesneleri yerli KİMLİĞİ oluşturma kullanılarak kaydedildiğinde eklenir.)

Zaman dışında explicity Flush() kesinlikle Oturumu ADO.NET aramalar yürütür hakkında garanti yok hayır, bunlar yürütüldüğü tek sipariş. Ancak, ISession.Find(..) yöntemleri asla eski veri döndürecektir garanti Arabiriminin yapar; ne de yanlış veri ile iade edilir.

Floş az görülür varsayılan davranışı değiştirmek mümkündür. FlushMode sınıfı tanımlar üç farklı mod: sadece flush de tamamlama süresi (ve yalnızca Arabiriminin ITransaction API kullanılır), sifon otomatik olarak kullanarak açıkladı rutin, ya da hiç floş sürece Flush() deniyor açıkça. Son modu uzun ISession açık tutulduğu çalışma birimlerinde çalışan ve uzun süre bağlantısız için yararlıdır.

...

Ayrıca this section bakın:

Dört ayrı aşamadan oluşur oturumu sonlandırmak için:

  • oturum yıkayın
  • hareketi tamamlamak
  • oturumu kapatın
  • özel durumları işlemek

Oturum kızarma

Eğer ITransaction API kullanarak olacak, bu adım hakkında endişelenmenize gerek yok. İşlem tamamlanmış olduğunda örtülü olarak yapılacaktır. Aksi takdirde ISession.Flush() tüm değişiklikleri veritabanı ile senkronize olduğundan emin olmak için aramalısın.

Veritabanı işlem yapılıyor

Eğer Arabiriminin ITransaction API kullanıyorsanız, bu gibi görünüyor:

tx.Commit(); // flush the session and commit the transaction

Eğer kendinizi ADO.NET işlemleri yönetmek eğer elle 30* *ADO.NET hareket etmelisiniz.

sess.Flush();
currentTransaction.Commit();

Eğer bir değişiklik yapmamaya karar verirseniz:

tx.Rollback();  // rollback the transaction

ya da:

currentTransaction.Rollback();

İşlem geri alma durumunda derhal kapatın ve Arabiriminin iç durum tutarlı olduğundan emin olmak için, geçerli oturum atmak gerekir.

Bu İSession kapanış

34 ** bir arama oturumu sona erdiğini gösteriyor. Kapat ana ima() ADO.NET bağlantı oturum tarafından görevinden ayrılmıştı.

tx.Commit();
sess.Close();

sess.Flush();
currentTransaction.Commit();
sess.Close();

Eğer kendi bağlantı sağladıysanız, Close() için bir başvuru verir, bu yüzden el ile kapatmak veya havuza iade edebilirsiniz. Aksi takdirde Close() havuza geri döner.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Khoury

    Adam Khoury

    23 Ocak 2008
  • AmeriiK_HD

    AmeriiK_HD

    16 AĞUSTOS 2012
  • Just So

    Just So

    3 HAZİRAN 2007