您在实体框架中找到的最烦人的功能(或缺少功能)是什么?

时间:2009-12-18 22:02:38

标签: entity-framework ado.net

我从实体框架开始。听起来不错。但我想知道我是否应该注意某处的某些弱点。那里有经验吗?

4 个答案:

答案 0 :(得分:5)

您可能需要开始使用您正在讨论的版本为这些问题添加前缀。 .NET 4.0中即将推出的版本已修复了大量的烦恼。

在使用第一个版本大约6个月后,在sql 2k8中使用一个像样的大小数据库(40多个表,几个表接近1M行,并且流量适当),我会说的是

  • 缺少外键属性。这意味着如果我想知道或只使用相关表的id,我必须加载实际的实体。 (在下一版中修复)
  • 在使用 DefaultIfEmpty 时,像linq to sql一样,缺少一个简单的外部连接。在下一个版本中修复。
  • 生成的Sql不够理想这似乎也会在下一个版本中修复
  • 很难从可测试性的代码中抽象出来并在多层环境中使用,但可以完成。这也可以归类为也已经解决的POCO问题。

还有更多,但这些是我最好的。

总的来说,我会再次使用它,但如果你从头开始,请节省一些痛苦,等待最新版本或尽可能开始使用测试版。

答案 1 :(得分:2)

您可能会找到walkthroughs for Entity Framework 4.0 useful。所讨论的所有新功能都是针对某人的当前发布版本的烦人排放。

我发现新的TDD /可测试性功能和T4代码生成功能特别有趣。

答案 2 :(得分:1)

关于EF1:

  • 生成的SQL太可怕了。它是连接的倍数,它比它大10倍。我有一个简单的查询,但有很多连接并通过EF(不执行)生成此查询显着减慢了我的应用程序。不,我无法使用预编译查询。我用视图来应对它。 SQL事件探查器非常有用。
  • 无法正确识别视图中的主键。导入视图或进行模式刷新时,必须手动更改edmx文件。
  • 您可以以图形方式从数据库设计实体,从数据库更新模型,但它并不总是有效,特别是当您更改字段类型或外键时。
  • 您无法更新模型中的一个表,始终必须从db更新整个模型。
  • 您无法为实体定义基类,它已经定义(EntityObject)。您可以使用接口,因为类被定义为部分。
  • 没有POCO,实体类与框架紧密相连。
  • 您可以通过EntityReference.EntityKey设置外键,但是当您有EntityCollection时,请准备往返db。或者我错过了什么?

答案 3 :(得分:-1)

我发现EF4 beta中的POCO对象和模型优先设计非常性感。