.net - 您使用 Entity Framework 的经历如何?

标签 .net entity-framework orm

EF 已经推出有一段时间了,我正在考虑对其进行评估 - 您的体验如何?

我对 Web 和桌面应用程序都感兴趣,也许还对 EF 和您使用过的其他 ORM 工具之间的一些比较感兴趣。

学习曲线是一个因素,因为有一个团队参与其中。这东西是臃肿困惑,还是精干锐利?

我听说 Microsoft 正在内部大规模使用此功能,所以这是一个好兆头。如果您对它如何适应微软目前似乎正在花钱的基于云的 future 有任何想法,那可能也会很有趣。毕竟,如果这是我们最终都需要知道的事情,那么优先级就会提高一两个等级。

非常感谢!

最佳答案

嗯,我刚刚在 EF 中实现了一个完整的系统,这是我第一次在生产环境中真正体验 EF。该应用现已运行约 45 天,每天都有 100 名用户使用它,没有出现任何问题。

我认为最重要的是你必须改变你的想法。如果您像关系数据库 ORM 一样思考,那么您的思维方式就已经错误了。您需要考虑部分方法、对象和扩展。一旦你掌握了基本的思维方式,事情就开始顺利进行(并且你从一开始就重写了很多代码)。

获得帮助很困难

EF 的另一个令人沮丧的部分是,无论你去哪里寻求帮助,都充满了 L2S 大佬,他们认为他们已经知道你需要做的一切,并一直试图告诉你放弃它,只使用 L2S...如果我愿意的话已询问如何在 L2S 中做到这一点,那么也许他们的意见是有效的......

EF 运行良好

生成对象的基本能力,然后可以通过部分方法进行扩展,效果很好。实际上,我在早期阶段非常沮丧,因为我一直试图按照 SQLCommand 中的方式获取内容。一旦您意识到可以根据业务逻辑需求而不是 SQL 工作方式来思考,您就可以完成更多工作。

例如 - 我一直尝试进行连接以获得与特定 FK 相关的各种任务的列表。当我最终发现我可以将整个 where 子句交给 EF 并让我弄清楚如何快速将数据返回给我时,代码实际上要快得多。

包括恶臭

但 Include 语法对我来说感觉就像是黑客。必须使用 .Include("TableName.DetailTable") 是丑陋的。也许我只是被智能感知宠坏了,但我讨厌这种语法。

按需加载

主细节负载也有点难看。如果您不想包含它们,您可以随时获取它们的引用并查看它是否为 .IsLoaded,然后调用 .Load。为什么?对象不能为我做这件事吗?我最终在我的对象上实现了一个扩展方法,如果我尝试加载未加载的详细类,它将根据需要加载它。看来这应该是我的本能。

注意:上一篇文章中提到的过滤记录集的详细负载并不复杂,但也不明显。您可以使用 Lambda 表达式进行过滤。

您想移动该项目吗?

这里有一个重要的原因:非供应商锁定。如果您想将该代码转移到另一个数据库,则无法使用 Linq2SQL 来实现。没有提供者模型。您可能有机会将 EF 系统转移到其他供应商。就我而言,同一项目在 SQL Server 和 VistaDB EF (Alpha) 上运行,无需更改代码。因此我可以通过 xcopy 部署它,或者在运行时连接到我选择的服务器。

关于.net - 您使用 Entity Framework 的经历如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/328938/

相关文章:

c# - 如何返回包含文件的文件夹列表?

c# - 使用 Entity Framework 和 LDAP 的 Oracle 连接字符串

c# - MVC 4 Entity Framework 一个特定的列不更新

c# - 指定的 LocalDB 实例不存在

java - Hibernate EntityManager 不会在持久化时抛出 EntityExistsException

java - Cascade ALL 未按预期工作

c# - Control.SuspendLayout 和 Control.ResumeLayout 会计数吗?

c# - 在 C# 中使用 DirectoryInfo/FileInfo.MoveTo() 将文件或文件夹重命名为小写

java - Hibernate 事务回滚是否会删除 "session.flush()"ed 实体?

c# - 如何在字符串中搜索一个词,然后得到这个词后面的数字?