c#-Singleton中的实体框架上下文
作者:互联网
我正在构建一个使用NHibernate和Session一起在Singleton Pattern中使用EF上下文的应用程序:
public class DbContextFactory
{
private static volatile DbContextFactory _dbContextFactory;
private static readonly object SyncRoot = new Object();
public DbContext Context;
public static DbContextFactory Instance
{
get
{
if (_dbContextFactory == null)
{
lock (SyncRoot)
{
if (_dbContextFactory == null)
_dbContextFactory = new DbContextFactory();
}
}
return _dbContextFactory;
}
}
public DbContext GetOrCreateContext()
{
if (this.Context == null)
this.Context = new DbContext(ConfigurationManager.AppSettings["DefaultConnectionString"]);
return Context;
}
}
我正在使用Ninject注入上下文:
public class DbContextModule : NinjectModule
{
public override void Load()
{
Bind<IDbContext>().ToConstant(DbContextFactory.Instance.GetOrCreateContext());
}
}
我正在读这种方法,有些人说这是不好的做法,我会遇到问题.
EF知道这一点的人可以向我详细解释吗?
解决方法:
NHibernate不会将Session用作单例.这种情况仅在极少数情况下才有意义,其中您的应用程序非常短,代表单个事务/工作单元.
Here are described reasons为什么不应该使用共享的/长期使用的上下文.如果多线程或服务器应用程序为多个客户端提供服务,则不得使用共享上下文.
标签:ninject,entity-framework-4,c,net,entity-framework 来源: https://codeday.me/bug/20191207/2087468.html