C# DbContext只是一个或多个模式以及内存中数据库的记录

C# DbContext只是一个或多个模式以及内存中数据库的记录,c#,sql,linq,entity-framework,C#,Sql,Linq,Entity Framework,我知道延迟和急切加载,这意味着ADO.NET在需要数据之前不会连接到db,所以当我调用.ToList()或迭代LINQ查询时,它会连接并检索数据 EF中的Db上下文只是了解数据库的模式,使我能够将Db作为对象和LINQ使用,或者了解模式,我的记录实际上在我的内存中? 我认为这是不合理的,甚至是不可能的,因为我的所有记录都在记忆中 另一个问题是,DbContext在内存或服务器上的过载是多少?这意味着只有一个DbContext就足够了,或者一个DbContext对于内存有重载,需要拆分它。这里是D

我知道延迟和急切加载,这意味着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
}
公共类数据库:IdentityDbContext
{
//内容
公共DbSet contentURL{get;set;}
公共数据库集内容{get;set;}
公共DbSet横幅{get;set;}
//项目
公共DbSet ItemCats{get;set;}
公共数据库集项{get;set;}
公共数据库集ItemImages{get;set;}
//很多其他的
}

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

见:

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

在决定上下文的生存期时,以下是一些一般准则:

当使用长时间运行的上下文时,考虑以下内容:

  • 当您将更多对象及其引用加载到内存中时,上下文的内存消耗可能会迅速增加。这可能会导致性能问题。
    • 当不再需要上下文时,请记住将其丢弃
    • 如果异常导致上下文处于不可恢复状态,则整个应用程序可能会终止
    • 随着查询和更新数据的时间间隔的增加,遇到并发相关问题的可能性也会增加
  • 使用Web应用程序时,请为每个请求使用上下文实例
  • 当使用Windows演示基础(WPF)或Windows窗体时,使用每个窗体的上下文实例。这允许您使用上下文提供的更改跟踪功能
见:


查看:tnx关于答案,领域驱动开发不确定它与DDD的关系。。。如果您正在寻找该概念,请考虑将DbWrice绑定到单个会话或工作单元。