Pekala, hemen hemen aynı şeyi isteyen bazı mesajlar gördüm ama noktalar biraz farklıydı.NHibernate FlushMode Oto Yıkamadan Önce Kızarma
Bu klasik bir durumdur: Ben FlushMode = ile (/ bulmak/enumerable/vb kriterler kullanılarak), ben veritabanından onları almaya çalışıyorum AYNI OTURUM'da içinde, bir varlık güncellenmesi ve/saklıyorum Oto. Sorun: NHibernate, sorgulamadan önce güncellemeleri temizlemiyor, dolayısıyla veritabanından tutarsız veriler alıyorum.
"Fair enough", bazı insanlar dokümantasyon devletler olarak, diyecekler: bazı invokasyonlar arasında gelen
- :
floş Bu süreç, aşağıdaki noktalarda varsayılan olarak gerçekleşir (bul) ya da ISession.Flush dan NHibernate.ITransaction.Commit()
- dan Enumerable()
- ()
Cesur "bazı çağrılar" açıkça NH'nin hiç bir sorumluluğu olmadığını söylüyor. Doküman ayrıca devletler çünkü IMO olsa, burada bir tutarlılık sorunu olduğundan emin olun: explicity) (Flush, Oturum ADO.NET aramaları yürütür zaman konusunda kesinlikle hiçbir garanti, sadece sipariş olduğunda hariç
onlar idam edilir. Ancak, NHibernate, ISession.Find (..) yöntemlerinin eskiyen verileri hiçbir zaman döndürmeyeceğini garanti eder; Yanlış verileri de geri döndürmezler. Ben CreateQuery kullanıyorsam
Yani, mülkiyet Değeri = 20 ile varlıklar için ve filtreleme (yedek bul), NH may Değer = 30, ile DEĞİL dönüş kişiler değil mi? Ama aslında böyle bir şey oluyor çünkü Flush, gerektiğinde otomatik olarak gerçekleşmiyor. Sonuçta
public void FlushModeAutoTest()
{
ISession session = _sessionFactory.OpenSession();
session.FlushMode = FlushMode.Auto;
MappedEntity entity = new MappedEntity() { Name = "Entity", Value = 20 };
session.Save(entity);
entity.Value = 30;
session.SaveOrUpdate(entity);
// RETURNS ONE ENTITY, WHEN SHOULD RETURN ZERO
var list = session.CreateQuery("from MappedEntity where Value = 20").List<MappedEntity>();
session.Flush();
session.Close();
}
: ben yanlış oluyor değilim, herkesin işini sağlamak için Flush aramak zorunda bir hata ya da sadece olmayan bir tahmin özelliği nedir?
Teşekkür ederiz.
Filipe
tks Tanrı, haklısın! :) Kod bloğu etrafında açık bir işlem kullanmak sorunu çözdü. Kriterleri kullanabilir, sorguları oluşturabilir, her neyse, değişiklik yapılır ve sorgu sonucu testi geçebilir. Tekrar teşekkürler! Dokümanları güncellemek için NH ekibine tavsiyede bulunacağım ve oto yıkama fonksiyonunun sadece açık bir işlem içinde çalıştığını ve bunun gelecekteki şüphelere yardımcı olacağını açıkça belirteceğim. – jfneis
Rica ederim. Büyük soru, şimdiye kadar bunu hiç anlamadım. –
Çok teşekkürler! Sorunumu çözdü. –