与ORM(NHibernate或Spring.Net)相比,我对数据集有点困惑。根据我的理解,ORM位于应用程序层和数据库层之间。它将为应用程序层生成SQL命令。这与数据集的作用相同吗?数据集和ORM有什么区别?这两种方法有哪些优缺点?希望这里的专家可以解释一下。
谢谢, Fakhrul
答案 0 :(得分:12)
它们之间存在着巨大的差异,首先是它们所代表的编程模型:
正如其他人在我面前回答的那样,我认为重要的是要看微软对数据集的看法以及维基百科对ORM的更好说明,但我认为(这对我来说是开始的)更多的是要了解它们之间的区别。模型。理解这不仅可以澄清背后的选择,而且更容易理解工具本身。
很少有解释可以说:
是一种模型,它倾向于尽可能接近地表示存储器结构中的表格数据(甚至根据需要)。所以很容易找到实现概念的实现表,列,关系实际上模型是对表结构的集中,因此面向对象是基于不是数据本身。这种模式可能有其自身的优势,但在某些情况下可能很难管理并且很难应用所包含数据的概念。正如之前的答案所说,像Dataset这样的实现,让或更好,迫使您准备(即使使用工具)所需的SQL指令来对数据执行操作。
是一个模型(正如 mendelt 在我之前说的那样..)对象直接映射到数据库对象,主要是表和视图(即使可以映射)甚至功能和程序也是如此)。这通常以两种方式完成,其中一个映射文件描述了映射,或者(在.NET或Java的情况下)代码属性。这个模型基于代表数据的 Objects ,因此可以像在普通程序中那样对它们进行面向对象,在某些情况下它更加引人注意和谨慎,但通常情况下,当你有信心时ORM它可能是一个非常强大的工具!如果ORM管理和设计得不好,或者更好理解weel,即使ORM也可能很难管理,所以理解技术很重要,但我可以根据自己的经验说ORM是一个非常强大的工具。在ORM中,该工具主要负责生成操作在代码中完成所需的SQL指令,在更多情况下,ORM具有中间语言(如HQL)来对对象执行操作。
映射器是一种不像ORM那样的工具,但是,将手写的SQL指令映射到对象模型。当需要手工编写SQL指令时,这种工具可能是更好的解决方案,但是它想要设计一个应用程序对象模型来表示数据。 在这个“模型”中,对象被映射到指令并在映射文件中描述(通常是iBatis.Net或iBATIS(java)的Xml文件)。使用映射器可以在SQL指令中定义粒度规则。在这种情况下,可以很容易地找到一些ORM概念,例如会话管理。
ORM和Mappers允许应用一些非常有趣的设计模式,这些模式可能不太容易以相同的方式应用于表模型,在本例中也适用于数据集。
首先请原谅我这个冗长的答案和我糟糕的英语,但对我来说,这样的答案让我过去很好地理解这些模型之间的区别,然后是实现之间的区别。
答案 1 :(得分:4)
数据集类绝对不是ORM; ORM使用面向对象的表示来映射关系数据。
它可以被视为某种“工作单元”,因为它可以跟踪必须删除/更新/插入的行。
答案 2 :(得分:1)
ADO.NET DataSet =
http://msdn.microsoft.com/en-us/library/zb0sdh0b(VS.80).aspx
ORM =
http://en.wikipedia.org/wiki/Object-relational_mapping (示例Developer Express XPO,DataObjects.NET)
答案 3 :(得分:1)
ORM基于对象和表之间的映射。不是这个数据集的情况。数据集本身就是一种直接表格的方式。 ORM基于最少的SQL脚本。但足以使用您编写SQL子句的数据集。在这种情况下,数据集不是ORM。
答案 4 :(得分:1)
不,数据集不是ORM的。它们可能看起来像是因为数据集将表映射到对象就像ORM一样,主要区别在于它们映射到的对象。
数据集有自己的表和行对象类型,它们与数据库的结构非常相似。您正在重建对象中数据库关系模型的一部分。将这些对象限制为类似于关系数据库的东西可以解决将数据库映射到对象模型所固有的一些问题。
ORM将数据库中的表和行映射到您自己的对象模型中。对象模型的结构可以针对您的应用程序进行优化,而不是类似于关系数据库。 ORM负责将关系模型转换为对象模型的困难。
答案 5 :(得分:0)
DataSet是DTO,一种数据传输对象。 DataSet本身无能为力。您可以使用DataAdapter(使用的提供程序)生成sql或调用预定义查询,但它仍然没有执行任何操作。