Vấn đề với việc chỉ sử dụng phạm vi giao dịch được nêu ở đây: NHibernate FlushMode Tự động không xả trước khi tìm thấy
Nó xuất hiện nhibernate (v3.1 với phương ngữ oracle và 11g db w / opd.net v2.112.1.2) yêu cầu các giao dịch riêng của nó để tránh sự cố tuôn ra nhưng tôi không thể làm cho phạm vi giao dịch hoạt động với nhibernate giao dịch.
Tôi dường như không thể làm cho nó hoạt động:(đây có thể là một lỗi trong nhibernate hoặc odp.net, không chắc chắn ...
tìm thấy vấn đề tương tự ở đây: NHibernate 3.0:TransactionScope và Auto -Flushing
CỐ ĐỊNH:đã tìm ra giải pháp! bằng cách đặt "tranh thủ =động;" vào chuỗi kết nối oracle của tôi, sự cố đã được giải quyết. Tôi đã có thể sử dụng cả giao dịch nhibernate (để khắc phục sự cố tuôn ra) và phạm vi giao dịch như vậy:
ISessionFactory sessionFactory = CreateSessionFactory();
using (TransactionScope ts = new TransactionScope())
{
using (ISession session = sessionFactory.OpenSession())
using (ITransaction tx = session.BeginTransaction())
{
//do stuff here
tx.Commit();
}
ts.Complete();
}
Tôi đã kiểm tra tệp nhật ký của mình và thấy điều này:2011-06-27 14:03:59,852 [10] DEBUG NHibernate.Impl.AbstractSessionImpl - tham gia giao dịch DTC:Serializable
trước khi bất kỳ SQL nào được thực thi trên kết nối. Tôi sẽ kiểm tra đơn vị để xác nhận việc thực hiện đúng. Tôi không quá chắc chắn những gì có thể nối tiếp đang nói với tôi