[英]Fluent NHibernate sessions closes the database connection
我正在使用Fluent NHibernate寫入Oracle 11g數據庫。 我不確定這是否有問題,但NHibernate驅動程序只有9和10g數據庫的配置設置。 無論如何,當我只實例化一個NHibernate SessionFactory和一個NHibernate會話時(同時使用常規會話和IStatelessSession)。 每當我對數據庫執行讀或寫操作時,Oracle sys.aud $表都會記錄正在執行的事務。 我們的DBA說這是因為連接正在登錄,然后在每次讀取或寫入事務后注銷。 通過大量查詢,我們最終會終止審計表。 我們將創建第二個數據庫用戶,對該帳戶進行調整審計,但NHibernate關閉並打開每個事務的連接是否為默認屬性? 有沒有辦法阻止連接登錄和注銷?
這是SessionFactory配置
public static ISessionFactory getSessionFactory() {
var cfg = FluentNHibernate.Cfg.Db.OracleClientConfiguration.Oracle10;
cfg.ConnectionString(c => {
c.Instance(...);
c.Username(...);
c.Password(...);
c.Server(...);
});
return Fluently.Configure().Database(cfg).Mappings(m => {
m.FluentMappings.Add<DummyDataMap>();
}).BuildSessionFactory();
}
這是我寫的測試的主要方法
static void Main(string[] args) {
try {
var sessionFactory = getSessionFactory();
/*using (var statelessSession = sessionFactory.OpenStatelessSession()) {
for (int i = 0; i < 1000; i++) {
var dd = new DummyData();
dd.FIRST_COLUMN = i;
using (var t = statelessSession.BeginTransaction()) {
statelessSession.Insert(dd);
t.Commit();
}
}
}*/
/*using (var statefulSession = sessionFactory.OpenSession()) {
for (int i = 0; i < 1000; i++) {
var dd = new DummyData();
dd.FIRST_COLUMN = i;
using (var t = statefulSession.BeginTransaction()) {
statefulSession.Save(dd);
t.Commit();
}
}
}*/
using (var statefulSession = sessionFactory.OpenSession()) {
for (int i = 0; i < 1000; i++) {
statefulSession.Query<DummyData>().Where(dd => dd.FIRST_COLUMN == i).ForEach(dd =>
Console.Out.WriteLine(dd.FIRST_COLUMN));
}
}
} catch (Exception ex) {
Console.Out.WriteLine(ex.Message);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.