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

时间:2012-02-08 10:24:32

标签: asp.net entity-framework code-first software-design

我认为我面临着一个我可以解决的架构问题:

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

在一个单独的类库中,我有DbContext和al,实体。 Web库很好地引用了这个库。

在“数据”库中,我有一个静态属性来保存de context:

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。

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

有关如何组织此项目的任何建议?

1 个答案:

答案 0 :(得分:2)

您的问题的答案并不简单。

首先我建议你使用依赖注入&控制反转框架(StructureMap,Unity,...)。

如果您要存储 DbContext ,使用 IOC 会让它变得如此简单。您可以定义上下文生存期。我通常会使用 PerRequest 一生。 每个Web请求的一个DbContext实例。 DBContext以请求开头并以它结束。

但是没有必要采用这种模式。 当你完成开始 上下文时使用后需要它并处理

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