Entity Framework与ADO.Net及NHibernate的比较
2016-05-27 07:24
211 查看
Entity Framework 是微软推荐出.NET平台ORM开发组件,
EF相对于ado.net 的优点
(1)开发效率高,Entity Framework的优势就是拥有更好的LINQ提供程序、文档,并且是由微软所支持的,用EntityFramework就是开发速度快(当然,那是在会linq的基础上),智能感知(也是linq支持的结果),通过实体、关系型数据库表之间的映射,使开发人员可以通过操作表实体而间接的操作数据库,大大的减少了代码量。不用定义实体类那些东西了。直接与数据库中模型结合起来了,开发人员完全可以根据面向对象的思维进行软件的开发。 (2)可以使用三种设计模式中的ModelFirst来设计数据库,而且比较直观 (3)可以跨数据库,只需要在配置文件中修改连接字符串 (4)与vs结合的比较好
EF的Context上下文不是线程安全的,你不应该在整个Service上使用一个Context上下文。 它的性能不如ADO。 它的概念模型,关系模型等全部都放在一个edmx文件里面,过于庞大,并不利于修改 什么的情况下,不建议使用EF呢?
非SQL Server数据库且无该数据库的DataProvider; 高性能要求。在进行一些复杂查询的情况下,EF的性能表现不太好,而开发人员又无法控制SQL语句的生成, 需要对每个查询进行监控,EF产生查询,他们是难以维护的,它并不能很好地支持映射到不规范的表; 实时的应用程序; 只能通过存储过程访问数据库。 EF的优势是:跟踪实体状态Change时,不仅仅在存储过程上.(即使EF确实对存储过程支持有限的)。 频繁插入操作(Insert), 并且EF不支持大数据Bulk 插入; 频繁更新操作,更新的目标主要是当多行(用一个单值)
就目前而言,使用EntityFramework还不如使用NHibernate,LINQ to Sql也是只支持Sqlserver。也可以选NHibernate,NHibernate具有大量Entity Framework 4.0所不具备的特性,像批量读/写、“额外的”延迟、集合过滤器、调整等等。 ORM 主流框架听说过的有以下几个:
1.NHibernate 2.iBatis 3.NBear 4.SubSonic 5.GentleNet 6.Dapper
ORM框架
1.NHibernate 一个传统的ORM,移植于java的Hibernate,3.0后发展迅速,提供FluentMap和FluentConfig,支持Linq,支持HQL和NativeSQL,支持一级缓存和二级缓存,丰富的ID生成策略,更多的拦截事件暴露,支持常见的所有数据库,缺点就是配置选项有点多,初学者无处下手
2.EntityFramework 微软官方出的ORM,配置简单,比NH更好的Linq支持,工具支持和较低的学习门槛,命名约定配置,支持CodeFirst DbMigration(在开发时,不能用在生产环境中),缺点就是不支持批量操作(第三方库EntityFramework.Extension扩展了这一点,还做了缓存),无原生的二级缓存,,单调的ID生成方式,不支持多数据库(很多数据库如MySql都对EF提供了支持,但是bug多多,有稳定的商业库可以选择),还有单一的配置方式(当你想从程序集动态加载model到DbContext中时,你就会知道就多捉鸡)
3.Dapper StackOverflow开源的一个MiniOrm,性能和原生ado.net相近,0配置,强类型支持.缺点同样是有小bug,较弱的LINQ支持(只找到一个MSSQL的linq插件)有两个关于Dapper的扩展,一个叫Dapper.Extension,一个叫Dapper.Rainbow.Mysql.这两个扩展可能更接近传统意义上的ORM
4.ServiceStack.OrmLite 另外一个MiniORM,性能仅次于Dapper,支持大部分的数据库,比Dapper丰富的多的API和更好的强类型lambda表达式查询条件支持,映射0配置,也支持以Attribute配置,支持表的创建和删除
相关文章推荐
- 【BZOJ-1941】Hide and Seek KD-Tree
- 第二次冲刺站立会议03
- android 调用系统相机
- DDL、DML和DCL的理解
- Qt 控件随窗口缩放
- 团队第二次冲刺03
- 【BZOJ-2400】Spoj839Optimal Marks 最小割 + DFS
- JAXB简单样例
- Android AutoComplate
- Eclipse下修改SVN地址
- Android绘制图形(重绘方法在此可以找到)
- 【BZOJ-3709】Bohater 贪心
- [Codeforces515D]Drazil and Tiles(构造)
- springmvc+activiti 完美整合- 流程在线设计+代码生成器+UI快速开发库,提高一半的开发效率
- 反射之取类中类的属性、变量名称及其值
- 【Java】反射机制1
- Android List Adapter
- java注释规范
- Bundl的作用
- 通用的事件侦听器函数