1

我正在努力创建一个包含许多模型的站点。我应该有个人背景,还是应该只有一个?我已经将我所有的 Dbsets 放在了我创建的总括上下文中,这样 Add-Migration 和 Update-Database 才能真正起作用。(因为它只能处理 1 个上下文)。

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

4

1 回答 1

1

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

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

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

using (MyDbContext dbCtx = new MyDbContext())
 {
     //fetch the model
 } 
//here the context is disposed.
于 2012-08-09T04:29:24.610 回答