当前位置:  开发笔记 > 数据库 > 正文

在NHibernate与实体框架之间做出决定?

如何解决《在NHibernate与实体框架之间做出决定?》经验,为你挑选了2个好方法。

NHibernate和Entity Framework 4.0的主要优点和缺点是什么?

(在标记我的问题时,我注意到了比EF更多的NHibernate标签.NMibernate更受欢迎吗?)



1> Sunday Ironf..:

我对EF(一些博客文章和教程)的经验非常有限,但是对NHibernate有很多经验.

微软一直落后于OpenSource运动,而NHibernate就是这样.当EF 1.0首次发布时,它缺乏对POCO支持和持久性无知等关键功能的支持,它要求您的实体类从EF扩展基本实体类,因此您的实体类不会与EF完全分离.这影响了可维护性和单元可测试性,以及在需要时切换ORM提供者的能力.

另一方面,NHibernate允许您将实体与NHibernate本身完全分离.EF 4.0在这方面已经有所提升,它的Code First Development方法(最近由Scott Guthrie宣布)是朝着正确方向迈出的一步.

NHibernate本身具有一些非常强大的映射功能,例如继承映射,组件类的映射(认为Customer实体上的Address对象),单向实体关联映射.它允许您充分利用域模型中面向对象编程(封装,多态,继承等)的强大功能,将您的实体类视为封装行为,而不仅仅是数据容器.如果您希望根据Domain Driven Design的原则构建域模型,那么NHibernate非常适合这一点.我不能直接在EF 4.0上谈论这些问题,只能从我听到其他尝试使用EF 4.0的NHibernate用户那里得知,但EF 4.0在这些领域仍然落后,但它正在取得进展.



2> duffymo..:

我要说的是,实体框架来自微软既是优势也是劣势.您可以从与.NET本身相同的源代码获得框架.坏消息是微软经常废弃自己的代码库而不考虑向后兼容性.

NHibernate不是来自微软,除了Hibernate和NHibernate的开发人员所说的代码之外,没有任何标准.好消息是他们一般都注意向后兼容性.有一个庞大的用户群,因为Hibernate已经存在了一段时间.

我最喜欢Spring的一个特点就是他们不会做出这样的决定.Spring有自己的JDBC功能,但它支持Hibernate,TopLink,JDO,iBatis和JPA.如果您决定采用其他方式(例如NoSQL),您也可以自由注入自己的类.为什么您的选择应该由框架选择决定?这是非常保姆:"我们是微软;我们比你更了解什么对你最好."


无论谁告诉你EF 4需要重写它还没有真正尝试过.我刚刚在不到一天的时间内将一个大型EF 1项目更新为.NET 4(所以不仅仅是EF更改,而是安装程序,FxCop等).出于某种原因,EF的实际经验似乎并不是表达一个人对此的看法的先决条件.
从我认为是知识渊博的同事那里得到了。也许我误会了。我将编辑答案。
推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有