2012-08-09 52 views
1

我正在努力创建一个有很多模型的网站。我应该有个人背景,还是应该有一个?我已经把所有Dbset放在了我所创建的保护环境中,只是为了实现Add-Migration和Update-Database。 (因为它只能处理1个上下文)。实体框架DBContexts如何构造?

我注意到每个强类型控制器都有一个关联模型上下文的实例。现在我想知道是否应该有一个打开的上下文(我的伞超类上下文)永久地打开一个页面生命周期。看起来效率太低,无法始终创建上下文的新实例并处理它们(在本地方法中)。推荐的方法是什么?

回答

1

最好有一个上下文跟踪许多实体。然后跟踪所有实体的相同上下文,当使用连接查询和更新具有外键关系的实体时,它将很有用。您也可以使用流利的API来配置DBContext方法“OnModelCreating”中的实体。如果上下文没有全部配置,则配置实体关系变得困难。在不同的环境下对实体进行分组最终将影响代码维护。我喜欢流畅的API方式来配置实体,以保持模型清洁和未来证明。

DBContext具有可以覆盖的Dispose方法。我们可以更好地利用它。除了DBContext创建一个数据库上下文,它从哪里调用,这是绝对好的。这就是我们想要的,不是吗?传入的请求是作为创建DBContext(数据库上下文)的线程,然后查询数据库,获取模型,然后填充视图然后返回给用户。

重要的是使用DBContext的“using”语句,它将在scope超出使用大括号后立即处理上下文。如果你这样做,那么你在通过请求生命周期生活的环境中没有任何问题。

using (MyDbContext dbCtx = new MyDbContext()) 
{ 
    //fetch the model 
} 
//here the context is disposed.