控制和管理DbContext

时间:2013-03-26 18:12:42

标签: asp.net-mvc entity-framework dbcontext

现在我有了这个背景

namespace Dafoor_MVC.Models
{
  public class DafoorDBContext : DbContext
  {
    public DbSet<Department> departments { get; set; }
    public DbSet<Course> courses { get; set; }
    public DbSet<Reply> replies { get; set; }
  }
}

这个背景会变得很大,因为我想要添加大约40个模型。

1-在一个环境中拥有40个模型是个好主意吗?

2-我希望在所有用户之间共享此上下文,因为如果记录已经在上下文中,我不想每次都使用查询来查看数据库,但这会影响服务器内存,所以如何才能我实现了类似“以前用过的最后一个对象或者没有被调用的对象需要一段时间从上下文中处理”的内容?我不想处理整个背景。

3 - 如果第2点不起作用,我可以在用户会话中放置上下文的实例,这样上下文将是特定于用户而不是应用程序特色

2 个答案:

答案 0 :(得分:1)

  

将40个模型放在一个上下文中是个好主意吗?

如果它们在逻辑上属于一体,那就没有错。

  

我希望在所有用户之间共享此上下文

不,你没有。您希望为每个单独的HTTP请求实例化一个上下文,并在完成HTTP请求的处理之前处置它。 缓存您的DbContext。

  

我可以在用户会话中放置一个上下文实例,这样上下文将是一个特定于用户而不是应用程序特色

您不应该缓存您的上下文。但是,您可以使用Session中的上下文存储检索的对象。在没有首先将对象重新附加到新上下文的情况下,您将无法更新对象/对象图。

<强>更新

这就是DbContext永远不应该存储在当前HTTP请求之外的原因:

One DbContext per web request... why?

答案 1 :(得分:0)

1)没有理由担心在一个上下文类中有40多个DbSets。它们只是集合,只填充了您当前使用的对象

2)DbContext和DbSet的实例成员不保证是线程安全的。我不推荐单身方法

3)你可以,但一定要正确处理数据库并发异常