数据访问库返回数据集或对象

时间:2008-12-29 21:13:29

标签: c# sql serialization

在使用调用存储过程的库时是否存在普遍共识?返回数据集还是使用sqldatareader填充自定义对象?

数据传输对象的序列化成本是否低于数据集?

5 个答案:

答案 0 :(得分:1)

就个人而言,我使用带有DataTables的SqlDataAdapter。 DataTables的开销 WAY 比DataSet少。我的实体对象只包含业务规则,它们不用于跨层传输数据。

答案 1 :(得分:1)

您可能想要考虑跳过数据访问库;相反,在您需要时,自动为您提供业务对象,填充数据。 NHibernate

答案 2 :(得分:1)

我必须同意Justice,不一定是关于NHibernate(虽然它是一个很好的选择)我肯定会看到使用某种ORM,如NHibernate,Subsonic,Linq-to-sql,llblgen或任何其他一个ORMs围绕着。

作为Jeremy Miller states:

  

如果您正在编写ADO.Net代码   亲,你偷了你的   雇主或客户。

为此,我不得不建议返回对象而不是数据集或数据表。

此外,如果您要返回数据集,除非您强烈键入每个数据集,否则您将不得不在库中编写大量“提升”代码以从数据集中获取值。使用ORM和对象完成所有繁重的工作。

最后,使用c#中的Linq,您现在可以获得更好的功能来处理可能为数据集带来优势的集合(聚合,分组,排序,过滤等)。

答案 3 :(得分:0)

我也使用dataReader,但是请注意,如果这样做,在完成填充自定义对象后,必须尽快关闭它(以及它正在使用的连接)...需要注意的是,当您调用OpenReader()时,请确保将名为CommandBehavior的可选参数设置为CommandBehavior.CloseConenction,或者即使关闭阅读器,也不会关闭底层连接并将其释放到池中直到它被GC拾取,如果你在一个循环中调用多个读取器对象,这很容易导致你用完可用的连接。

答案 4 :(得分:0)

在某些时候,它取决于库的目的,或者我可以说,库的功能。自OOP大肆宣传以来,“普遍共识”是首先使用数据加载器检索/获取DAL中的数据,因为它们更快,然后加载对象并关闭读者,但情况并非总是如此。为了保持简洁,一些人传回数据集,以便可以限制网格视图,并且可以使用最少的代码启用分页/排序。记住简单就是最好的。

在报告应用程序中,我注意到了数据集的相似性,特别是如果数据是由webservices公开的。

血清化的成本将取决于应用程序的使用情况和经验。缺乏经验的开发人员可能会在数据集中返回3000到50000行不必要的数据。请记住,数据集是动物,但具有很多功能。明智地使用。

大多数ORM会在幕后进行序列化(我在这里做了更正),所以可以公平地说它不会花费那么多,但这又取决于应用程序。