我认为我面临着一个可以解决的架构问题:
我正在开发一个 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/