FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 23786|回复: 24
打印 上一主题 下一主题

下个版本的示例不要再用EF了。

[复制链接]
跳转到指定楼层
楼主
发表于 2013-10-21 10:51:30 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
个人观点:让FINEUI发展起来,我们在数据核心处理部份不建议使用EF结构。
1、 相信没有完美的ORM,目前主流的NH,iBatis等等都是如此。
EF也不例外,运到复杂的关联查询的时候,用linq写那是非常困难的。就算能写出来,维护性和可读性也不及直接写sql。
2、EF最大的麻烦就是联合查询实现困难,它只是体现数据库的某个表,要多表的信息还得先在数据库中建视图,使用不便,还是直接SqlCommand用起来方便,否则用EF是给自己找麻烦。
3、我曾经对LINQ TO SQL感兴趣过,后来发现自动生存的SQL代码中,无法很好的处理Distinct语句,更不用说是用CASE WHEN了,于是我开始抛弃类似的SQL实体。不过那个CLR函数倒是很不错的改进,虽然比起Oracle晚了好几年,不过也算是有了这个功能了,写个自定义聚合函数让我查询效率倍增。
4、在EF中使用join,那么数据是怎么过滤的,是join之后过滤,还是join之前过滤。我希望join之后过滤,那么EF是不是会将表中所有数据先加载到内存中,然后join,最后执行过滤?如果是百万级以上的表,这样是不是太慢了,几乎不现实的做法。而我要是用SQL语句实现,过滤是在数据库中执行,效率明显提高,因为数据库就是用来处理数据库,在程序中执行数据库的部分功能就是降低效率,不可能有数据库中执行过滤筛选速度快。
沙发
 楼主| 发表于 2013-10-30 22:10:16 来自手机 | 显示全部楼层
使用示例:  从 Northwind 示例数据库生成完整 Entity Model。  EdmGen /mode:FullGeneration /project:Northwind /provider:System.Data.SqlClient /connectionstring:"server=.\sqlexpress;integrated security=true; database=northwind" 从 ssdl 文件开始生成 Entity Model。  EdmGen /mode:FromSSDLGeneration /inssdl:Northwind.ssdl /project:Northwind 验证 Entity Model。  EdmGen /mode:ValidateArtifacts /inssdl:Northwind.ssdl /inmsl:Northwind.msl /incsdl:Northwind.csdl 为什么要使用Entity Framework,限制条件及当前版本框架的问题  优势 通过对比上面图4与图2、图3我们可以很清楚的看到使用Entity Framework一个很大的好处,我们可以把实体类的定义由一个单独的项目使用C# class完成这样一种设计方式转变为使用xml文件定义并集成到数据访问层。      在以往要在一个项目中动态创建实体,我所知的方法是把要添加的实体放入一个程序集,然后通过反射加载程序集。现在可以通过动态更改EDM的方法来增加实体并将其映射到数据库,后者是以前无法实现的。      便于更改数据库,当更换数据库后,只需修改SSDL的定义,(如果数据库的表明有变动,也只需多修改MSL),对CSDL没有任何影响,从而也不需要对程序的BLL等上层部分做任何改动。  条件 要想让一个数据库支持Entity Framework,一个必要条件就是该数据库需提供相应的Entity Client Data Provider,这样才能将Entity SQL转换为针对此数据此数据库的SQL并交由ADO.NET来执行。当然该数据库还需要提供ADO.NET Data Provider。  缺陷 Entity Framework技术的效率问题是其几乎唯一一个稍有不足之处。首先其将EntitySQL转换为SQL的方式属于解释性转换,性能较差。另外Entity Framework在每次应用启动时需要读取EDM,这个过程较慢(但在后续操作时,就不再存在这个问题)。本论坛的源码可以支持ACCESS,SQL SERVER ,ORCEL三中数据库任意设置。就是用三层数据结构
板凳
 楼主| 发表于 2013-10-30 22:12:38 来自手机 | 显示全部楼层
条件 要想让一个数据库支持Entity Framework,一个必要条件就是该数据库需提供相应的Entity Client Data Provider,这样才能将Entity SQL转换为针对此数据此数据库的SQL并交由ADO.NET来执行。当然该数据库还需要提供ADO.NET Data Provider。  缺陷 Entity Framework技术的效率问题是其几乎唯一一个稍有不足之处。首先其将EntitySQL转换为SQL的方式属于解释性转换,性能较差。另外Entity Framework在每次应用启动时需要读取EDM,这个过程较慢(但在后续操作时,就不再存在这个问题)。本论坛的源码可以支持ACCESS,SQL SERVER ,ORCEL三中数据库任意设置。就是用三层数据结构
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-5-2 22:37 , Processed in 0.057147 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表