Дозвуковые и хранимые процедуры - PullRequest
2 голосов
/ 23 октября 2008

При использовании SubSonic вы возвращаете данные в виде набора данных или помещаете их в строго типизированную пользовательскую коллекцию или универсальный объект?

Я пробежал дозвуковой проект, и для четырех сохраненных процедур, которые есть в моей БД, он дал мне Sps.cs с 4 методами, которые возвращают объект StoredProcedure.

Если вы использовали MVC, вы обычно используете объект StoredProcedure или оборачиваете его вокруг своей бизнес-логики и возвращаете набор данных, список, коллекцию или что-то еще?

Наборы данных все еще норма или это заменено чем-то другим?

Ответы [ 5 ]

5 голосов
/ 23 октября 2008

Если результаты хранимой процедуры имеют ту же схему, что и одна из ваших таблиц, вы можете создать коллекцию, используя этот код (SubSonic 2.1):

ProductCollection coll = new ProductCollection();
coll.LoadAndCloseReader(SPs.GetProducts(1).GetReader());
3 голосов
/ 04 апреля 2009

ExecuteTypedList<> ваш лучший друг в этом случае:

IList<Product> list=SPs.GetProducts().ExecuteTypedList<Product>();
2 голосов
/ 23 октября 2008

Если моя хранимая процедура возвращает все поля из одной из таблиц, для которых у меня есть объект SubSonic, тогда я выполняю LoadAndCloseReader для результата хранимой процедуры. Если моя хранимая процедура возвращает данные, которые не соответствуют объекту SubSonic, я просто работаю с ним как с набором данных.

1 голос
/ 09 декабря 2008

Возможно, верните datareader и затем итерируйте его, чтобы заполнить некоторые пользовательские объекты. В качестве альтернативы быстрый и грязный способ (так как вы не используете дизайн, управляемый доменом), создайте представление в БД с той же структурой, что и хранимый процесс, а затем загрузите результат в коллекцию ViewObjectCollection, аналогично коду Джона.

0 голосов
/ 04 апреля 2009

Вы можете выполнять считывание данных, но это так, 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)()
...