【问题标题】:How to manage dbcontext in layered asp.net web application using EF 4.x如何使用 EF 4.x 在分层的 asp.net Web 应用程序中管理 dbcontext
【发布时间】:2012-03-13 11:59:53
【问题描述】:

一个解决方案中有四个项目:DAL、BOL、UI 和 Model。

Model 包含 POCO 类,而 DAL 仅包含一个 DbContext 类,其中引入了模型。所有项目都引用了 Model 项目,UI 引用了 BOL,BOL 引用了 DAL。

目前的例如保存数据的方法是: 在 UI 中按下 Submit 按钮后,表单的数据存储在模型 POCO 类中,POCO 类转到 BOL 保存方法,当 BOL 实例化时,dbcontext 也实例化,save 方法使用该 dbcontext 提交更改。

问题:像这样实例化 dbcontext 是否有效?我应该做其他事情来获得更高的性能吗?我正在尝试获得尽可能高的性能,因为可能会同时将大量记录插入数据库。

【问题讨论】:

  • 如果你想插入一堆记录作为一个工作单元,使用一个上下文实例是有意义的。但是,如果您指的是大规模并发(同时),则每个调用都会有自己的上下文。你说的是哪两个?
  • 好吧,最好让它通用。我将为程序员在底层构建方法和类,这样他们就可以从上层调用它们来插入/更新/删除/加载数据。他们不需要担心连接、dbcontexts,......而应该只关注业务。根据您的 cmets,在 BOL 构造函数中实例化 dbcontext 是正确的,但如果程序员需要同时插入一堆记录,则应使用 BOL 的一个实例。您可以将此建议回复为帖子回复,我会将其标记为答案。
  • 好的,但我认为大部分是你自己的想法和阐述,所以如果你回答自己的问题(这在 Stack Overflow 上很好)并将其标记为已接受(可能2 天后)。

标签: asp.net web-applications entity-framework-4.1 poco dbcontext


【解决方案1】:

在底层,DbContext 和 EF 仍然使用 ADO.NET 连接机制来连接数据库,因此它们仍然使用 ADO.NET 连接池之类的东西。话虽如此,您不希望 DBContext 保持打开的时间超过您需要的时间,因为那样会保留来自连接池的连接,并且连接将经常处于空闲状态。需要时在 using 语句中创建 DBContext。

【讨论】:

  • 在一个 BOL 类中,我可能有 3 种连接数据库的方法,你的意思是在每个方法中使用 using 语句更好?如果我想通过调用一个方法来插入 100 条记录,那么在每次创建新的 dbcontext 时调用包含“using”语句的该方法是否有效?
猜你喜欢
  • 2019-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多