实体框架DBContexts如何构造?

时间:2012-08-09 04:09:14

标签: asp.net asp.net-mvc

我正在努力创建一个包含许多模型的网站。我应该有个人情境,还是应该只有一个?我已经将所有Dbset放在我制作的伞形上下文中,只是为了使Add-Migration和Update-Database真正起作用。 (因为它只能处理1个上下文)。

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

1 个答案:

答案 0 :(得分:1)

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

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

重要的是使用DBContext的“using”语句,它将在scope超出using括号后立即处理上下文。如果你这样做,那么你可以毫不费力地完成请求生命周期中的上下文。

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