[英]NHibernate: Is making session singleton a bad practice?
在我的應用程序中,我將會話作為SessionManager
類中的單例對象。 每當我需要在應用程序的某個部分使用它時,我會這樣做:
using (var session = SessionManager.OpenSession())
{
}
這可能是一種不好的做法嗎? 如果是這樣,關於如何改進的任何想法?
編輯 :這是會話管理器的實現
public static class SessionManager
{
private static readonly ISessionFactory sessionFactory;
static SessionManager()
{
sessionFactory = Fluently.Configure().....
}
public static ISessionFactory SessionFactory
{
get { return sessionFactory; }
}
public static ISession OpenSession()
{
return sessionFactory.OpenSession();
}
}
請注意,ISession 不是線程安全的! 因此,您應該只有一個ISessionFactory,但每個線程只有一個ISession。
不,它應該是單例,以便可以在應用程序的不同線程之間共享它。 由於這些對象包含連接信息,hibernate配置信息和映射文件,位置路徑,因此這些對象的權重很大。 因此,創建實例數將使我們的應用程序變得更加重要。 但是會話對象不是線程安全的。
只有需要具有不同配置的多個工廠的應用程序才有明顯的理由創建和關閉多個SessionManager實例。
單線程它將提高應用程序的性能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.