SubSonic和存储过程

时间:2008-10-23 01:22:34

标签: stored-procedures subsonic

使用SubSonic时,您是将数据作为数据集返回还是将其放入强类型自定义集合或通用对象中?

我浏览了亚音速项目,并且在我的数据库中有四个存储过程,它给了我一个带有4个方法的Sps.cs,它返回一个StoredProcedure对象。

如果您使用的是MVC,您是否经常使用StoredProcedure对象或将其包裹在业务逻辑周围并返回数据集,列表,集合或其他内容?

数据集仍然是常态还是被其他东西取代?

5 个答案:

答案 0 :(得分:5)

如果存储过程的结果与您的某个表具有相同的模式,则可以使用此代码构建集合(SubSonic 2.1):

ProductCollection coll = new ProductCollection();
coll.LoadAndCloseReader(SPs.GetProducts(1).GetReader());

答案 1 :(得分:3)

在这种情况下,

ExecuteTypedList<>是你最好的朋友:

IList<Product> list=SPs.GetProducts().ExecuteTypedList<Product>();

答案 2 :(得分:2)

如果我的存储过程返回我有一个SubSonic对象的表中的所有字段,那么我对存储过程的结果执行LoadAndCloseReader。如果我的存储过程返回的数据与SubSonic对象不匹配,那么我只是将其作为数据集使用。

答案 3 :(得分:1)

也许返回一个datareader,然后迭代它以填充一些自定义对象。或者,快速而肮脏的方式(因为您没有使用域驱动设计)在DB中创建一个视图,其结构与存储过程相同,然后将结果加载到类似于John代码的ViewObjectCollection中。

答案 4 :(得分:0)

你可以做数据阅读器,但那是1999年。使用SubSonic返回对象是轻而易举的,并且比数据阅读器更容易使用。您可以像这样检索对象:

Dim Charts As Generic.List(Of MusicDB.Billboard) = _
    New SubSonic.Select(MusicDB.DB.Repository.Provider, New String() _
    {"Prefix", "Artist", "Track", "ArtistNarrowToken", "TrackNarrowToken", "ArtistId", "TrackId", "TrackYear"}). _
    From(MetadataTagger.MusicDB.Tables.Billboard). _
    Where(MusicDB.Billboard.Columns.ArtistNarrowToken).IsLessThan(10). _
    Or(MusicDB.Billboard.Columns.TrackId).IsNull(). _
    OrderAsc(New String() {"TrackYear"}).ExecuteTypedList(Of MetadataTagger.MusicDB.Billboard)()