【发布时间】:2012-03-04 22:37:44
【问题描述】:
我有一个基于非常经典的不同层的 n 层应用程序:用户界面、服务 (WCF)、业务逻辑和数据访问。
数据库(Sql Server)显然是通过实体框架查询的,问题基本上是每个调用都从用户界面开始并经过所有层,但是这样做我需要每次为每个操作创建一个新的 ObjectContext 并且使性能非常糟糕,因为每次我需要重新加载元数据并重新编译查询。
最推荐的模式是下面的模式,这也是我实际在做的:每次服务接收到调用时,通过业务层方法创建和传递新上下文
public BusinessObject GetQuery(){
using (MyObjectContext context = new MyObjectContext()){
//..do something } }
对于简单的查询,我没有看到任何特定的交易,它工作正常,但对于复杂和繁重的查询,它会进行 2 秒的查询,每次调用会持续大约 15 秒。
我可以将 ObjectContext 设置为静态,它可以解决性能问题,但似乎没有人建议,还因为我无法从不同的线程同时访问上下文,并且多个调用会引发例外。我可以让它成为线程安全的,但长时间保持相同的 ObjectContext 使它变得越来越大(而且速度越来越慢),因为它导入每个查询的引用它执行一个查询。
我认为它是最常见的架构,那么实现和使用 ObjectContext 的最佳和已知方式是什么?
谢谢, 马可
【问题讨论】:
标签: performance linq entity-framework entity-framework-4 linq-to-entities