orm和ADO.net有什么区别?

Meh*_*egi 10 c# orm ado.net entity-framework linq-to-sql

我正在读一本书,它说:"如果你通过使用ADO.NET访问你的数据库来创建自己的数据访问层,那么无论数据模式是否存在,你都将受到的影响微乎其微.但是如果你使用的是O./RM,您的灵活性将受到您使用的工具的限制".ADO.NET和任何其他ORM之间的主要区别是什么?

Rom*_*och 9

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

ADO.NET将数据访问与数据操作分离为可以单独使用或串联使用的独立组件.ADO.NET包括用于连接数据库,执行命令和检索结果的.NET Framework数据提供程序.这些结果要么直接处理,要么放在ADO.NET DataSet对象中,以便以临时方式向用户公开,与来自多个源的数据结合,或者在层之间传递.DataSet对象也可以独立于.NET Framework数据提供程序使用,以管理应用程序本地数据或源自XML的数据.

ADO.NET是一个层,允许您连接到数据库并使用SQL连接,命令和参数对其进行修改.ADO.NET MSDN

计算机科学中的对象关系映射(ORM,O/RM和O/R映射工具)是一种用于在面向对象的编程语言中在不兼容类型系统之间转换数据的编程技术.这实际上创建了可以在编程语言中使用的"虚拟对象数据库".尽管有些程序员选择构建自己的ORM工具,但有可用的免费和商业软件包可以执行对象关系映射.

Entity Framework一个NHibernate是ORM.这意味着您不通过SQL连接,命令,参数进行操作 - ORM工具为您执行操作,它允许以OOP方式映射数据库结构:您可以使用C#中的对象添加,读取,更新,删除数据库中的记录.您只需要正确地将对象映射到DB.Entity Framework是在ADO.NET上构建的,它使用ADO.NET.SQL语句由ORM生成.ORM

通常,在没有ORM的情况下访问DB会更快,但您应该提供更多代码行.如果要以OOP方式操作数据库并编写更易读的代码,则应选择ORM.这取决于您的目的选择什么.

Micro ORM(Dapper,BLToolkit)允许您编写SQL查询并将参数映射到对象属性.一般来说,微型ORM比完整ORM具有更好的性能,但ADO.NET仍然更快.

此外,StackOverflow还有一些问题和答案:EF vs ADO.NET


Tah*_*667 9

  • 一路走来,我了解到开发人员讨厌DataSetsDataReaders
  • .NET平台定义了许多允许您与关系数据库系统交互的命名空间。总的来说,这些命名空间被称为ADO.NET.
  • ORM 的意思Object-Relational Mapper 是将对象与关系世界进行映射。顾名思义builds a relation / maps objects (model) to database objects(tables).
  • ADO.NET是将应用程序连接到数据库的传统方式,并让开发人员完全控制数据库操作,而ORM构建在数据库之上ADO.NETADO.NET隐式使用。
  • 简而言之,使用像NHibernate 这样的 ORM,实体框架使生活变得更简单,其中对象(模型)的映射由内部处理ORM.
  • 当您使用 时,ORM并非一切都在您手中,因为所有查询都是由其ORM本身生成的。现在我们不知道这些查询是否经过优化

在应用程序的性能是主要关注点且绝对关键的情况下,或者在您知道应用程序在不久的将来会变得巨大的情况下,建议使用它,ADO.NET而不是Entity Framework因为它会使您的应用程序变得沉重。

  • 解决这个问题的方法Micro ORM's就像Dapper、BLToolkit。这些提供了开发人员想要的本质——一种将数据库操作映射到强类型类的简单方法。
  • 某些 Micro-ORM 的 LINQ 支持使其变得更好。但是其中一些 Micro-ORM 的主要优点是它raw speed.

至理名言:

  1. Dapper只是做映射,但你需要编写很多代码,EF在其之上做更多的事情,而不仅仅是映射。所以EF会很慢。
  2. 我还可以说 pureADO.NETDapperOLEDB比 更快ADO.NET并且ODBC可以比OLEDB.
  3. 因此,如果我认真对待性能,我可能会避免任何ORM.