我知道懒惰和急切加载,这意味着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
}
答案 0 :(得分:1)
DbContext是Schema和Cache。它将跟踪之前加载的对象的对象状态,并随着时间的推移而减慢。我个人发现在有限的时间内使用DbContext是一件好事,比如工作单元或请求响应。
请参阅:
还有其他原因,特别是在错误处理方面,为什么保持相同的上下文会导致意外行为:
在决定上下文的生命周期时,以下是一些一般性指导原则:
使用长时间运行的上下文时,请考虑以下事项:
- 当您将更多对象及其引用加载到内存中时,上下文的内存消耗可能会迅速增加。这可能会导致性能问题。
- 请记住在不再需要时处理上下文。
- 如果异常导致上下文处于不可恢复状态,则整个应用程序可能会终止。
- 随着查询和更新数据的时间之间的差距越来越大,遇到与并发相关的问题的可能性也会增加。
- 使用Web应用程序时,请为每个请求使用上下文实例。
- 使用Windows Presentation Foundation(WPF)或Windows窗体时,请为每个表单使用上下文实例。这使您可以使用上下文提供的更改跟踪功能。
请参阅: