【问题标题】:Building an ORM with Datasets使用数据集构建 ORM
【发布时间】:2009-09-19 13:50:17
【问题描述】:

DataSet 不是 ORM,但可以使用 Dataset 构建 ORM http://www.15seconds.com/issue/080103.htm

这种文章非常罕见,因为人们似乎反对 Datasets 和 ORMs 所以还有其他例子吗?

【问题讨论】:

    标签: c# orm dataset


    【解决方案1】:

    ORM 与 DataSet 完全不同。

    DataSet 是内存中关系数据库表的 1:1 副本;一个 DataSet 包含多个 DataTables,每个 DataTables 由列和行组成。它或多或少是一个“内存中的关系数据库”——没有映射,没有翻译——只是一个 1:1 的副本。

    如果您对使用这种列/行样式(适用于许多情况)感到满意,那就太好了。

    ORM 是一种完全不同的野兽——顾名思义,它是一个对象关系映射器,例如它将这些关系列和行映射到域模型中的域对象及其集合。它在列和行之间映射到具有属性的对象集合中。

    您不再处理客户表,而是处理客户对象、客户列表等。您正在针对“普通”业务对象进行编程,当您保存它时,ORM 将负责将其映射到表、列和行。

    由于 DataSet 或多或少是数据库的 1:1 副本,理论上您可以在其之上放置一个 ORM 以从中获取对象 - 但有什么意义呢?当您最终还是想使用 ORM 时,为什么还要首先使用 DataSet 呢?我认为这种方法没有任何好处...

    向我(以及其他 Stackoverflowers)解释为什么要在此基础上使用 DataSet 和 ORM?你的目标是什么,你的想法/方法是什么??

    因此,这实际上是在 DataSet 或 ORM 之间进行选择 - 两者都可以工作,或者迎合不同的编程和架构风格。选择你的,并对此感到满意。

    马克

    【讨论】:

    • 数据集是简单的积木,在这种情况下,您可以使用它来构建其他东西,例如 ORM。这就是 15 秒的文章所做的,所以你读过这篇文章还是说作者疯了,甚至想出这个想法?
    • 只是一个 1:1 的副本。这对我来说似乎不是真的,因为文章说你没有义务与数据库进行精确匹配,因为它是一个独立的层。
    • 让我们假设它是真的,据我所知 ActiveRecord 也只是一个 1:1 映射,这并不妨碍被认为是一个好的 ORM 方案,那么问题是什么?
    • “您正在针对“普通”业务对象进行编程,当您保存它时,ORM 将负责将其映射到表、列和行。”是什么阻止了业务对象位于数据集的顶部?
    • @marc_s 好吧,我只是问一个关于 EF 的问题 stackoverflow.com/questions/1449044/… 没有真正的 Oracle 提供者,也没有 MS Access 的提供者,这两个我想用坏运气:)
    【解决方案2】:

    我同意 marc_s 的 cmets。

    您提到的文章似乎有点过时了。它试图将数据集用作 ORM 工具,而当时 ORM 工具的可用性比现在更加有限。

    我建议您查看实体框架(一种 ORM),它支持活动记录模式,以及具有类似于数据集的 UI 工具。如果您所做的只是根据您的数据库自动生成实体,那么您可能不会注意到与使用数据集有很大的不同。

    http://msdn.microsoft.com/en-us/library/aa697427(VS.80).aspx

    【讨论】:

    • 文章说:“市面上的ORM工具有很多,有的比较贵,有的比较便宜,大部分都很好的生成数据实体,有的甚至为业务对象生成数据结构. 如果您有预算并且不介意使用预定义的架构,那么选择一个并使用它。另一种选择是将数据集的强大功能用作 ORM 工具。所以可以肯定的是,它并没有过时。它根本没有尝试,它确实创建了一个 ORM 工具。我想使用数据集,因为我可以从简单的东西演变成更复杂的东西。
    • 另外,我担心实体框架对 SQL Server 来说过于紧凑,并且过于复杂,无法满足我的需要。
    • Entity Framework 与 SQL Server 无关,与 NHibernate 相比,它的功能并不丰富。欢迎您构建自己的 ORM,这将花费很长时间,花费大量时间/金钱,并且功能很差。
    猜你喜欢
    • 2022-01-05
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多