asp.net - 在 ASP.NET 应用程序中,DbContext 存储在哪里?

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

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

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

在一个单独的类库中,我有 DbContext 和 al 实体。显然,该库由 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!

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

最佳答案

您问题的答案并不简单。

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

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

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

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

关于asp.net - 在 ASP.NET 应用程序中,DbContext 存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9191450/

相关文章:

asp.net - .SVC 文件生成的 Javascript 代理 URL 在 SSL 下不起作用

entity-framework - Ado.net Entity Framework 调试可视化工具

entity-framework - 如何使用 Code-First 注释父子关系

entity-framework - Entity Framework 5 和字符枚举

entity-framework - EF Code 一、如何实现从一张表到另一张表的两个外键?

json - 如何在 Entity Framework 中添加 JSON 检查约束?

javascript - 为 javascript 转义 .NET 正则表达式模式

javascript - 对 .aspx 和 .html 感到困惑

asp.net - 如何以编程方式创建 "true"Excel 文件

sql-server - Code First 迁移和存储过程