EF4与NHibernate相比如何?

时间:2011-01-31 02:46:07

标签: nhibernate entity-framework fluent-nhibernate entity-framework-4 entity-framework-ctp5

还好吗?我听说过CodeFirst扩展,但是它已准备好进入黄金时段。请分享您在开发,任何性能开销等方面的经验。

2 个答案:

答案 0 :(得分:6)

我认为这是一个及时的问题,因为我想知道完全相同的事情。我正在尝试创建一个严肃的电子商务模型,我试图让我的POCO不受持久性问题的影响,并试图保持领域驱动设计的真实性。到目前为止,我非常谨慎,而且我是否应该跳到NHibernate。阻止我这样做的唯一原因是我认为微软会改进(并且很快)。

到目前为止一些最大的问题:

  • 无法精确控制对象实现。 EF在您的POCO上调用零参数构造函数,这是一种您无法更改的行为。
  • 没有枚举支持。社区一直在尖叫 - 尖叫! - 为此,它没有发生。解决方法非常糟糕,污染了您的域模型。
  • 尝试控制数据库中的列名和关系时出现奇怪的映射错误。我能想到的主要是复合键和多对多关系。这些可以解决,我认为这些将通过发布时间来修复,但它们仍然令人沮丧。
  • 错误的SQL。我也做DBA工作,EF生成的SQL(有或没有Code-First)是非常糟糕的。

这只是冰山一角:我只是开始学习EF4而且我遇到了可怕的障碍。当我想到更多原因时,我会在这里添加它们。我还在苦苦挣扎。

(我想知道社区是否会再次投票“不信任”。)


更多:

  • 要添加到“奇怪的映射错误”问题:如果列参与自引用关系(例如,如果您有层次结构),则无法控制列的名称。我认为这将在最终版本中修复。
  • 缺少批处理,导致数据库多次往返。例如,如何从集合中删除一堆项? 将所有实体加载到内存中并一次删除一个。较小的抱怨是插入参与继承关系的表时的数据库命中数。
  • 没有智能的方式来处理模型更改。如果需要更改架构,EF Code-First喜欢完全删除整个数据库。
  • 几乎没有可扩展性。您可以直接指望EF4允许您订阅的事件数量(而Code-First不提供更多)。

答案 1 :(得分:0)

至于我 - 我更喜欢EF,但有一些改进。 EF基本上为您提供以下优势:

  • 视觉模型编辑器
  • 数据库/模型更新向导(而不是手动XML更改 - 对我来说很糟糕)

另外,我正在使用基于EF和L2S(LinqConnect)的第三方商业工具,它为我提供了以下功能: