返回强类型存储过程结果

时间:2010-10-26 20:15:13

标签: .net asp.net stored-procedures data-access-layer business-logic

目前,如果我们想从数据库中获取记录列表,我们的DAL会将DataTable返回到业务层,然后将相同的DataTable返回给我们的调用接口(在本例中为asp.vb页面)。 / p>

但是我不相信我们应该从BLL返回DataTable,我一直认为最好根据存储过程中的字段返回强类型集合 例如

public Class MyCustomType
    public customerId as int32
    public name as string
end Class

public function GetCustomers() as Generic.ICollection(Of MyCustomType)
    //call to DAL here
end function

实现这一目标的最佳方法是迭代我们的DataTable,并为每个DataRow创建一个新的MyCustomType对象并将其添加到集合中,然后返回集合吗?

感谢。

3 个答案:

答案 0 :(得分:2)

这就是我们在工作的地方做的事情。在我们的例子中,我们得到一个DataReader并手动填充类实例的字段。我们还从List<MyClass>派生出一个新的列表类型。确保正确检查DBNull.Value和正确的转换以及所有这些。

答案 1 :(得分:2)

看起来你的设计试图将责任分开但却停止了一半。将与DataTable一样模糊的东西返回到表示层,将其隐式地耦合到数据源的特定模式知识。最有可能的是,DataTable包含演示文稿甚至不需要的信息。处理BLL中的细节并将强类型的有目的对象返回到PL,这与您尝试设计的模型更加一致。

答案 2 :(得分:0)

这是一个实用程序的链接,可以帮助将DataTable映射到MyCustomType对象:

http://www.eggheadcafe.com/articles/20040221.asp

它有点旧,但可能会有所帮助。也许还有其他一些工具,比如AutoMapper。