EntityFramework VS纯Ado.Net

时间:2014-03-11 14:35:48

标签: c# linq entity-framework stored-procedures ado.net

EF是如此广泛使用的员工,但我没有意识到我应该如何使用它。我用不同的方法在不同的项目上遇到了很多关于ef的问题。所以有些问题汇集在我脑海里。并且答案使我使用纯ado.net和存储过程。 所以问题是:

  1. 如何在n层应用程序中处理EF? 例如,我们有一些带有EF的DAL。我看到很多文章和项目使用存储库,单元工作模式作为EF的某种抽象。我认为这种方法会杀死大多数可以提高开发速度并导致一些事情的好处:
    • 重新映射EF加载导致某些DTO杀死性能(调用一些select来获取表数据 - 第一个循环,第二个循环 - 将结果映射到ef生成的某些复合类型,next - 使用linq过滤映射数据,最后,将其映射到一些DTO)。完全重新映射到DTO是最大的efs利益之一的杀手;
    • 会在EF(及其版本)和应用之间产生强大的凝聚力。这将是类似于2层应用程序与dal和演示文稿与bll或dal与bll和演示文稿。我想这不是最好的做法。除了映射之外,我们对之前的事情进行了相同的加载过程,因此再次提出了性能问题。我们可以尝试使用EF作为DAL而不需要任何抽象。但我们会以其他方式得到类似的问题。
  2. 我应该在每个app \ thread \ atomic操作中使用一个上下文吗?使用方法 - 每个app \ thread一个上下文可能会稍微提高性能和调用导航属性的可能性,但我们遇到另一个问题 - 更新此上下文并在上下文中增加加载的数据,我也不确定每个dbcontext的并发性应用程序\线程。使用每个操作的上下文将导致我们将ef结果重新映射到我们的DTO。所以你看到我们再次回到问题1。

  3. 我们可以尝试仅使用EF + SP吗?我们再次提出以前的问题。如果不使用大部分功能,使用ef的原因是什么?

  4. 所以,是的EF很适合开始项目。当我们几乎没有屏幕和crud操作时,它非常方便。 但接下来呢?

    所有这些文字都只是未分类的想法。我知道纯粹的ado.net会带来另一种挑战。 那么,您对此主题有何看法?

4 个答案:

答案 0 :(得分:20)

通过遵循命名约定,您会发现它被称为:ADO.NET实体框架,这意味着实体框架位于ADO.NET之上,因此它不会更快,它可能会执行在相同的时间内,但让我们看看EF提供:

  • 在没有任何关于你正在编写的内容是否会编译的情况下,你不会再陷入编写查询的困境。
  • 它使您依赖C#或您喜欢的.NET语言编写您希望直接从模型类中的目标用户接受的数据约束。

最后:EF和LINQ在以后维护您的应用程序方面给予了很大的帮助。

实体框架有三种不同的模型:模型优先,数据库优先和代码优先了解每个&em; em。

- 重映射过程中杀死性能的要点正在进行中,因为在第一次运行时,EF将元数据加载到内存中,并且从edmx文件构建模型的内存表示时需要时间。 / p>

答案 1 :(得分:1)

在任何情况下,实体框架都无法像大多数旨在实现“更快”结果的工具或工具箱那样高效。

  1. 使用存储过程作为接口,应该将对数据库的访问视为一个单独的层。没有任何应用程序比绝对需要CRUD操作更多的理由。少即是多的原则。存储过程易于编写,保护和维护,实际上是最快的方法。很容易编写工具来通过存储过程为POCO和DbContext生成所需的代码。

  2. 设计精良的应用程序应具有数量有限的数据库连接字符串,而其中任何一个都不应该是全能的上帝。使用架构支持连接权限。

  3. 延迟加载是为解决不应该存在的问题而添加的虚假语句,它是ORM及其即插即用功能引入的。仅在需要时才读取数据。开发人员应负责根据应用程序上下文实现此逻辑。

  4. 如果您的应用程序逻辑在维护状态方面有问题,那么没有工具会帮助您。实际上,通过掩盖实际问题直到为时已晚,这会使情况变得更糟。

  5. 首先,数据库是设计良好的应用程序的唯一解决方案。文明很久以前就意识到了固体渡槽和下水道系统的重要性。高级代码可以并且将随时替换,但是数据保持不变。如果数据库设计合理,重写整个应用程序只需几天时间。

  6. 应用程序只是对数据库的访问而已。在大多数情况下仍然如此。

这是我通过许多不同的工具或工具箱生成的代码进行业务应用程序调试多年后得出的结论。标榜的更快结果甚至无法覆盖后来试图清理混乱情况所浪费的时间/精力。性能问题很少(即使不是由高需求引起)的,而是通过不可用工具添加的所有“功能”的总和。

答案 2 :(得分:0)

ADO。 Net是一个面向对象的框架,允许您与数据库系统(SQL,Oracle等)进行交互。 实体框架是一种操纵数据库中数据的技术,如(查询集合(惰性表名,select * from this))。 它与LINQ一起使用。

答案 3 :(得分:0)

  

ADO.NET提供对SQL Server和XML等数据源以及通过OLE DB和ODBC公开的数据源的一致访问。数据共享使用者应用程序可以使用ADO.NET连接到这些数据源,并检索,处理和更新它们包含的数据。

     

Entity Framework 6(EF6)是用于.NET的久经考验的对象关系映射器(O / RM),具有多年的功能开发和稳定性。像EF这样的ORM具有以下优势

     
      
  • ORM使开发人员可以专注于应用程序的业务逻辑,从而有助于减少代码。

  •   
  • 它消除了对重复SQL代码的需求,并为开发速度带来了许多好处。

  •   
  • 防止编写手动SQL查询;等等。

  •   
  1. 在n层应用程序中,这取决于,取决于您的应用程序正在处理的数据量和数据库正在管理的数据量。据我所知,DTO不会降低性能。它们是用于在层之间移动数据的数据容器,仅用于传递数据,不包含任何业务逻辑。它们主要用于服务类。请参见DTO.
  2. 一个DBContext始终是最佳实践。
  3. 据我所知,没有EF + SP(存储过程)的这种组合。如果您希望同时使用EF和SP之类的ORM,请尝试使用Dapper,BLToolkit等微型ORM。它是为此目的而构建的,比EF快很多。这是一篇关于Dapper ORM.
  4. 的好文章

以下是与类似主题相关的主题:What is the difference between an orm and ADO.net?