asp.net应用程序中的DbContext存储位置?

asp.net应用程序中的DbContext存储位置?,asp.net,entity-framework,code-first,software-design,Asp.net,Entity Framework,Code First,Software Design,我想我正面临一个可以解决的架构问题: 我正在开发一个web应用程序,首先使用实体框架代码(v4.3 beta1)。 此外,还发布了一些web服务 在一个单独的类库中,我有DbContext和al,即实体。很明显,web应用程序引用了该库 在“数据”库中,我有一个用于保存de上下文的静态属性: namespace MMOrpheus.Lib { public class Context { public static MMOrpheusDB MMO

我想我正面临一个可以解决的架构问题:

我正在开发一个web应用程序,首先使用实体框架代码(v4.3 beta1)。 此外,还发布了一些web服务

在一个单独的类库中,我有DbContext和al,即实体。很明显,web应用程序引用了该库

在“数据”库中,我有一个用于保存de上下文的静态属性:

namespace MMOrpheus.Lib
{
    public class Context
    {
        public static MMOrpheusDB MMO
        {
            get
            {
                if (HttpContext.Current != null && HttpContext.Current.Session["MMOEntities"] == null)
                {
                    HttpContext.Current.Session["MMOEntities"] = new MMOrpheusDB();
                }
                return HttpContext.Current.Session["MMOEntities"] as MMOrpheusDB;
            }
            set
            {
                if (HttpContext.Current != null)
                    HttpContext.Current.Session["MMOEntities"] = value;
            }
        }
    }
}
MMOrpheusDB从DbContext继承

所以问题是我觉得这是不对的。除此之外,我认为这个上下文类不应该使用System.Web

关于如何组织这个项目有什么建议吗?

你的问题的答案并不简单

首先,我建议您使用依赖注入和控制反转框架(StructureMap,Unity,…)

如果要存储DbContext,使用IOC将非常简单。您可以定义上下文的生存期。我通常会用一生的时间。每个web请求有一个DbContext实例。DBContext以请求开始,以请求结束

但是没有必要使用这种模式。您只需在需要时启动您的上下文并在使用后处置它即可

如果您喜欢第一种方法,请搜索域驱动设计、IOC、工作单元、存储库模式等