【问题标题】:How does EF4 compare with NHibernate?EF4 与 NHibernate 相比如何?
【发布时间】:2011-01-31 02:46:06
【问题描述】:

好些了吗?我听说了 CodeFirst 扩展,但它准备好迎接黄金时段了吗?请分享您在开发、任何性能开销等方面的经验。

【问题讨论】:

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


【解决方案1】:

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

迄今为止最大的一些问题:

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

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

(不知道社区会不会再给它一票“不信任”。)


更多:

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

【讨论】:

  • 这很有趣也很有用。我希望更多的人在巨魔关闭这个帖子之前发表评论。
  • 我也想听听更多,因为我/非常/对提交 EF4 代码优先感到矛盾。
  • 这是一个非常好的列表。我在过去几个月中经历的所有有效点。我还要考虑 EF4 缺乏 GEOGRAPHY 数据类型支持(SQL Server),以及无法将用户定义的表类型(也是 SQL Server)传递给存储过程。为了对抗前者,我不得不使用触发器,而为了对抗后者,我将其贬低为经典的 ADO.NET。
  • 除了缺少GEOGRAPHY之外,我会补充缺少HIERARCHYID。但是,我们可能会将其变成 EF4/SQL Server 愿望清单,而不是解决“EF4 准备好迎接黄金时段了吗?”以及相关的问题“EF4 可以合理地做 NHibernate 所做的事情吗?” (我希望我能在这个问题上开始赏金。我很乐意捐出我所有的观点来获得全面的意见。)
  • 我相信 NHibernate 也会调用空 arg 构造函数。
【解决方案2】:

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

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

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

【讨论】:

  • NHibernate 也有很多不同的设计师。您可以将它与流利和自动映射一起使用,而无需 xml
  • 你能给这些设计师发个链接吗?
猜你喜欢
  • 1970-01-01
  • 2011-02-08
  • 2014-03-06
  • 1970-01-01
  • 2013-05-26
  • 2011-02-07
  • 2023-03-26
  • 2010-09-06
  • 2011-03-17
相关资源
最近更新 更多