您的位置:首页 > 其它

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配置,支持表的创建和删除
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: