【问题标题】:Where to store DbContext in a asp.net application?在 asp.net 应用程序中存储 DbContext 的位置?
【发布时间】:2012-02-08 10:24:32
【问题描述】:

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

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

在一个单独的类库中,我有 DbContext 和其他实体。很明显,这个库被 Web 应用程序引用。

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

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!

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

【问题讨论】:

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


    【解决方案1】:

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

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

    如果您要存储 DbContext,使用 IOC 会变得如此简单。您可以定义上下文生命周期。我通常会选择 PerRequest 生命周期。 每个 Web 请求都有一个 DbContext 实例。 DBContext 以请求开始,以请求结束。

    但是没有必要遵循这种模式。你可以简单地开始上下文当你需要它并在使用后丢弃

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      • 2011-02-26
      • 1970-01-01
      相关资源
      最近更新 更多