我有一个基于经典不同层次的n层应用程序:用户界面,服务(WCF),业务逻辑和数据访问。数据库(Sql Server)显然是通过实体框架被打破的,问题基本上是每个调用都从用户界面开始并贯穿所有层,但这样做需要每次为每个操作创建一个新的ObjectContext,这使得性能非常糟糕,因为每次我需要重新加载元数据并重新编译查询。实体框架和ObjectContext n层体系结构
最建议图案这将是下面的一个,它是什么,我实际上做:创造和传递新的上下文throught每个服务接收到呼叫
public BusinessObject GetQuery(){
using (MyObjectContext context = new MyObjectContext()){
//..do something } }
为了便于实时业务层的方法查询我没有看到任何特定的dealy,它工作正常,但对于复杂和沉重的查询,它使2秒钟的查询继续每次调用15秒。
我可以设置ObjectContext静态,它可以解决性能问题,但它似乎不被任何人建议,也因为我不能同时从不同的线程和多个调用同时访问上下文一个例外。我可以让它成为线程安全的,但长时间维持相同的ObjectContext会使它变得越来越大(并且越来越慢),因为它导入的引用每个查询都会执行查询。
我拥有的体系结构我认为这是最常见的,那么实现和使用ObjectContext的最佳方法是什么?
谢谢 马尔科
是的,我已经读了文章,这就是为什么我不使用Singleton模式,我不明白为什么当我每次创建一个新的objectcontext时,对于复杂查询来说性能很糟糕 – MaRuf 2012-02-13 14:29:52
'每次'都是什么意思?那是在重新编译你的代码并启动你的应用程序?还是多次执行一个函数? – 2012-02-13 14:33:22
我的意思是每次用户界面调用服务时,它会创建一个新的ObjectContext,执行一个查询并返回一些结果,每次我执行此操作时它都很慢,如果我在同一个调用中执行此操作多次,第一次 – MaRuf 2012-02-13 14:36:43