我正在研究将要进行的新项目的Entity Framework,并且作为对它的研究的一部分,我向一些行业专业人员询问它是否稳定并且为“现实世界”的实施做好了准备。
在运行中是:
- 英孚
- NHibernate
- DevExpress XPO
我已经在XPO方面拥有丰富的经验,但是我对此并不特别满意。
我正在研究将要进行的新项目的Entity Framework,并且作为对它的研究的一部分,我向一些行业专业人员询问它是否稳定并且为“现实世界”的实施做好了准备。
在运行中是:
我已经在XPO方面拥有丰富的经验,但是我对此并不特别满意。
Answers:
是的,但有一些警告:
它得到了Microsoft的完全支持,并拥有一个不断发展的社区-但比其最接近的竞争对手nHibernate更新,它的社区还没有那么成熟。
除了社区还不成熟外,有时还会有EF4可用的功能,但几乎没有记录;或EF4会抛出Google无法帮助您的异常情况。
当按照Microsoft的预期用途使用时,它具有全功能,但以我的经验,很难将其改装到现有系统中。理想情况下,您将在具有100%Microsoft堆栈的未开发环境中使用它。它肯定足够灵活,可以与其他系统混合,但是这样做会大大增加难度。
但是,重申这一要点,它是完整且稳定的,可用于生产。
需要指出的一个关键问题是,ORM的工作原理是将关系范式映射到OO范式。如果这些层中的任何一个都不遵循其各自范例的规则,那么您会感到额外的伤害。
这可以双向进行-如果您精通SQL和OOP的基于关系/集合的范例,那么ORM会让两者像黄油一样混杂。如果您的数据库看起来像是面向对象的,而您的OO代码看起来像是基于记录的,则使用YMMV。
我们已经在多个生产应用程序中使用了EF。我们还在多个生产应用程序中使用了NHibernate。STW关于EF在“按Microsoft预期使用时”效果最好的评论肯定是正确的。对于NHibernate来说也是如此,按照NHibernate团队的预期模式使用时效果最佳。我没有XPO的知识或经验。
我不后悔将NHibernate投入生产。
我不后悔将实体框架投入生产。
使用EF的驱动因素之一是与LINQ的集成。我知道NHibernate在LINQ上也做了很多工作,但还没有时间进行调查。
我们将EF4.1和Code First方法一起用于我们的Web项目,并且如前所述,如Microsoft所希望的那样保持用法,它将避免您遇到很多问题。
但是,人们可以注意到该系统尚未真正成熟,我之所以这样说是因为: