DbContext只是模式或模式以及我的数据库在内存中的记录

时间:2014-07-10 11:33:26

标签: c# sql linq entity-framework

我知道懒惰和急切加载,这意味着ADO.NET不会连接到db,直到数据必需,所以当我调用.ToList()或迭代LINQ查询时,它会连接并检索数据。

在EF中的Db上下文只知道数据库的模式,并让我能够使用db作为对象和LINQ或者知道模式并且我的记录实际上在我的记忆中吗?

我认为这不是合理的,甚至可能我记忆中都有记录!

另一个问题是内存或服务器上DbContext 的重载量是多少?它意味着只有一个DbContext足够或者一个dbContext有内存过载,需要拆分它。这是DDD和拆分DbContext之间的关系。

你能指导我一个理解的链接吗?

 public class Db : IdentityDbContext<User>
{

    //content
    public DbSet<UrlEntity> ContentUrls { get; set; }
    public DbSet<Content> Contents { get; set; }
    public DbSet<Banner> Banners { get; set; }

    //item
    public DbSet<ItemCat> ItemCats { get; set; }
    public DbSet<Item> Items { get; set; }
    public DbSet<ItemImage> ItemImages { get; set; }

   // lots of other
}

1 个答案:

答案 0 :(得分:1)

DbContext是Schema和Cache。它将跟踪之前加载的对象的对象状态,并随着时间的推移而减慢。我个人发现在有限的时间内使用DbContext是一件好事,比如工作单元或请求响应。

请参阅:

还有其他原因,特别是在错误处理方面,为什么保持相同的上下文会导致意外行为:

  

在决定上下文的生命周期时,以下是一些一般性指导原则:

     

使用长时间运行的上下文时,请考虑以下事项:

     
      
  • 当您将更多对象及其引用加载到内存中时,上下文的内存消耗可能会迅速增加。这可能会导致性能问题。   
        
    • 请记住在不再需要时处理上下文。
    •   
    • 如果异常导致上下文处于不可恢复状态,则整个应用程序可能会终止。
    •   
    • 随着查询和更新数据的时间之间的差距越来越大,遇到与并发相关的问题的可能性也会增加。
    •   
  •   
  • 使用Web应用程序时,请为每个请求使用上下文实例
  •   
  • 使用Windows Presentation Foundation(WPF)或Windows窗体时,请为每个表单使用上下文实例。这使您可以使用上下文提供的更改跟踪功能。
  •   

请参阅: