EF4与NHibernate相比如何?

Sri*_*ddi 6 nhibernate entity-framework fluent-nhibernate entity-framework-4 entity-framework-ctp5

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

ano*_*non 6

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

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

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

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

(我想知道社区是否会再给它一个"不信任"的投票.)


更多:

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