首页 / 知识
关于实体框架:Linq对实体的性能与ESQL
2023-04-13 21:06:00

Performance of Linq to Entities vs ESQL使用Entity Framework时,ESQL的性能是否比Linq to Entities更好? 我更喜欢对实体使用Linq(主要是由于强类型检查),但是我的其他一些团队成员则将性能作为使用ESQL的理由。 我想全面了解使用这两种方法的优点/缺点。 最明显的区别是: Linq to Entities是强类型代码,包括不错的查询理解语法。" from"位于" select"之前的事实使IntelliSense可以为您提供帮助。 实体SQL使用传统的基于字符串的查询以及更熟悉的SQL之类的语法,其中SELECT语句位于FROM之前。因为eSQL是基于字符串的,所以动态查询可以在运行时使用字符串操作以传统方式进行组合。 不太明显的主要区别是: Linq to Entities允许您使用" select new {...}"语法将形状更改或"查询"查询结果为所需的任何形状。 C#3.0新增的匿名类型允许这样做。 使用实体SQL不能进行投影,因为您必须始终返回ObjectQuery < T >。在某些情况下,可以使用ObjectQuery
团队成员之一在此处和此处详细描述了其他更细微的差异。 ESQL还可以生成一些特别有害的sql。我不得不跟踪使用继承类的查询的问题,我发现我的4行小巧的ESQL被翻译成100000个字符的怪兽SQL语句。 用Linq做同样的事情,并且编译后的代码更易于管理,比方说20行SQL。 另外,正如其他人所提到的,Linq是强类型的,尽管在没有编辑并继续功能的情况下进行调试非常烦人。 广告
在这里显示性能比较的漂亮图形: 实体框架使用两层对象映射(与LINQ to SQL中的单层相比),并且附加映射会降低性能。至少在EF版本1中,仅当建模和ORM映射功能可以证明该成本合理时,应用程序设计人员才应选择实体框架。 与LINQ to Entities相比,Entity-SQL(eSQL)使您更轻松地执行诸如动态查询之类的事情。但是,如果您没有需要eSQL的场景,那么我将不愿意在LINQ上依赖它,因为它将很难维护(例如,不再进行编译时检查等)。 我相信LINQ也可以让您预编译查询,这可能会提高性能。 Rico Mariani不久前在博客中发表了有关LINQ性能的文章,并讨论了编译查询。 您可以用更多的代码来检查编译时间,这对我来说比性能要高得多。话虽这么说,在这个阶段我可能倾向于ESQL不仅是因为性能,而且(目前)它在功能上也更加灵活。没有比使用没有真正需要的功能的技术堆栈更糟糕的了。 实体框架不支持自定义属性,自定义查询(当您需要真正调整性能时)之类的功能,并且与linq-to-sql的功能不同(即,有些功能根本无法在实体中使用)框架)。 我对Entity Framework的个人印象是,它具有很大的潜力,但是在其当前状态下的生产环境中使用它的实现可能有点"僵化"。 对于直接查询,我使用linq到实体,对于动态查询,我使用ESQL。也许答案不是"要么/或",而是" //也"。 |
最新内容
相关内容
提升Python程序性能的好习惯
提升Python程序性能的好习惯,代码,名字,检测,数据,培训,模块,函数,变量,性能,对象,掌握一些技巧,可尽量提高Python程序性能,也可以避免不必要的Python 性能剖分工具
Python 性能剖分工具,时间,工具,环境,分析,数据,代码,标准,人员,项目,培训,眼看着项目即将完成,却被测试人员告知没有通过性能测试,这种情况在Python性能分析
Python性能分析,代码,分析,对比,时间,工具,标准,注释,跨行,通用,报告,python标准库提供两个代码性能分析相关的模块,即timeit和cProfile/profipython怎么检查变量是否存在
python怎么检查变量是否存在,培训,变量,方法,语句,字典,局部,函数,以上,两个,方式,python中判断变量是否存在方法一:使用try:...exceptNameErrpython怎么检查文件是否存在
python怎么检查文件是否存在,检测,培训,异常,名字,文件,模块,文件夹,方法,语句,操作,python检查文件是否存在的方法:os模块中的os.path.existspythonPython是强类型还是弱类型
pythonPython是强类型还是弱类型,培训,代码,标准,类型,语言,变量,脚本语言,解释性,动态,赋值,python是强类型的动态脚本语言。强类型:不允许不关于性能:.Net 2.0-泛型列表的效率
关于性能:.Net 2.0-泛型列表的效率如何?,关于性能:.Net 2.0-泛型列表的效率如何?,负载,应用程序,数据,用户,.Net 2.0 - How efficient ar关于C#:NSEnumerator性能与可可中的
关于C#:NSEnumerator性能与可可中的for循环,关于C#:NSEnumerator性能与可可中的for循环,循环,集合,项目,修改,NSEnumerator performanc如何检查运行时使用的Visual Studi
如何检查运行时使用的Visual Studio的活动解决方案配置?,如何检查运行时使用的Visual Studio的活动解决方案配置?,配置,自定义,解决方关于Java:从JPA / EJB3持久性上下文
关于Java:从JPA / EJB3持久性上下文分离实体,关于Java:从JPA / EJB3持久性上下文分离实体,方法,查询,实体,最简单,Detach an entity fr性能与可读性
性能与可读性,性能与可读性,这是,它是,引号,解决问题,Performance vs Readability阅读此问题后,我发现它是(请注意引号)"代码"以解代理服务器的C#性能(vs C)
代理服务器的C#性能(vs C),代理服务器的C#性能(vs C),代理服务器,执行,服务器,我想,C# Performance For Proxy Server (vs C++)我想