orm 和 ADO.net 有啥区别?

Posted

技术标签:

【中文标题】orm 和 ADO.net 有啥区别?【英文标题】:What is the difference between an orm and ADO.net?orm 和 ADO.net 有什么区别? 【发布时间】:2017-03-23 05:29:16 【问题描述】:

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

【问题讨论】:

MS 想知道为什么人们不信任认证。该语句意味着即使数据库不存在,您也可以在代码中编写原始 SQL 查询。它只是一个无法检查或验证的字符串。如果有人像这样工作,他应该被允许参加那个考试 链接到有罪的book。考试参考 70-486 开发 ASP.NET MVC 4 Web 应用程序 如果我没记错的话,你也可以创建一个适配器模式,这样你就可以同时使用这两种模式。这是一个额外的步骤,但以后可能会为您省去心痛。 【参考方案1】:

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 是一个允许您连接到 DB 并使用 SQL 连接、命令、参数对其进行修改的层。 ADO.NET MSDN

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

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

一般来说,不使用 ORM 访问 DB 会更快,但您应该提供更多代码行。如果您想以 OOP 方式操作您的数据库并编写更具可读性的代码,您应该选择 ORM。这取决于您选择什么的目的。

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

另外,*** 上有一些问答:EF vs ADO.NET

【讨论】:

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

在您的应用程序的性能是首要关注和绝对关键的情况下在您知道您的应用程序将在未来变得巨大的情况下,建议使用 ADO.NET 而不是Entity Framework 因为它会让你的应用程序变得很重。

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

智慧语:

    Dapper 只是做映射,但你需要编写很多代码,EF 在它上面做更多的事情,而不仅仅是映射。所以 EF 会很慢。 我也可以说纯ADO.NETDapper快,OLEDBADO.NET快,ODBC可以比OLEDB.快 因此,如果我认真对待性能,我可能会避免任何ORM.

【讨论】:

如果我没记错的话,你也可以创建一个适配器模式,这样你就可以同时使用这两种模式。这是一个额外的步骤,但可能会在以后为您省去心痛。您对此有何意见?

以上是关于orm 和 ADO.net 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

LINQ TO SQL 和 ADO.NET ENTITY 有啥区别呢?

.net、asp.net、MVC、Ado.Net、EF、ORM、NHibemate之间的关系?

asp.net 和ado.net有啥异同?

Nhibernate 与其他 ORM 的区别是啥?

CQRS读端ORM还是纯ADO.NET?

adodb 和 oledb 有啥区别?