orm - ORM 和 DAL 有什么区别?

标签 orm data-access-layer

我已经阅读了两者,但它让我更加困惑。我试图找到差异(和相似之处),但无法说服自己。它们都是业务逻辑和数据库之间的中间层。有区别还是相同?

最佳答案

ORM(对象/关系映射器):

  • 它是一个库/工具,用于执行输入 SQL 查询(某些 ORM 也为您生成查询)并将输出 DataReader(或其他语言中的等效项)转换(映射)为您的强类型对象。这是任何 ORM 的基本特性。
  • 也就是说,它充当数据存储和应用程序之间的层。
  • ORM的核心作用是映射;它总是(主要是?)返回强类型对象。在极少数情况下,它可能会返回由 int 等语言提供的基本数据类型的值。 , string
  • 这是应用程序不可知的;除了您必须为每个应用程序/数据存储单独配置它。
  • 这仅涉及 RDBMS。
  • 一些高级 ORM(full-ORM)可以用作 DAL;这主要是一个设计决定。
  • 由于应用程序不可知,这无法实现您特定的持久性逻辑。

  • DAL(数据访问层):
  • 它是一个处理所有数据需求的层。但这与 ORM 不同。
  • 其实,这个可以使用 ORM 内部用于任何 RDBMS 通信。尽管 DAL 也可以在不使用任何 ORM 的情况下进行设计。
  • DAL 可能会返回强类型对象,但并非总是必要的。
  • DAL 可以与任何形式的数据存储进行通信,包括 Web API、XML、RDBMS。
  • 映射可能是也可能不是 DAL 的一部分,这取决于它的设计方式。
  • 这是特定于应用程序的。
  • 有不同的模式可用于将 DAL 实现为数据访问对象或存储库。
  • 专为特定应用程序设计,这可能包括您的特定持久性逻辑,如数据加密。
  • 关于orm - ORM 和 DAL 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49500230/

    相关文章:

    c# - Entity Framework 、IRepository 和 UnitOfWork。你如何实现 DAL?

    java - 当分离的实体版本属性为空时,为什么 Hibernate 实体管理器执行插入而不是更新?

    python - 如何 Django ORM update() 嵌套在 JSONField 中的多个值?

    python - 从 peewee 模型中获取有序的字段名称

    entity-framework - Entity Framework 的完全封装

    asp.net-mvc - MVC 层和 DAL 和数据层

    c# - 使用 Code First Entity Framework 的数据访问层、模型层和 POCO 类

    c# - Fluent NHibernate是否足以稳定生产?

    java - Hibernate:如何只获取非逻辑删除的对象

    c# - ASP.NET MVC2 数据访问层