编程语言
首页 > 编程语言> > c#-Singleton中的实体框架上下文

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