0

现在我有这个上下文

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 点不起作用,我可以在用户会话中放置一个上下文实例,这样上下文将是用户特定的而不是应用程序特定的

4

2 回答 2

1

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

如果它们在逻辑上属于同一类,那并没有错。

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

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

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

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

更新

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

每个 Web 请求一个 DbContext... 为什么?

于 2013-03-26T18:18:27.390 回答
0

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

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

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

于 2013-03-26T18:24:14.150 回答