2008-10-23 8 views
2

Lors de l'utilisation de SubSonic, renvoyez-vous les données sous forme de jeu de données ou les placez-vous dans une collection personnalisée fortement typée ou un objet générique?Procédures sous-sonnettes et stockées

J'ai couru à travers le projet subsonic et pour les quatre procs stockés que j'ai dans ma DB, il m'a donné un Sps.cs avec 4 méthodes qui retournent un objet StoredProcedure.

Si vous utilisiez un MVC, utilisez-vous habituellement l'objet StoredProcedure ou enveloppez-vous votre logique métier et renvoyez un ensemble de données, une liste, une collection ou autre chose?

Les ensembles de données sont-ils toujours la norme ou sont-ils remplacés par quelque chose d'autre?

Répondre

5

Si les résultats de la procédure stockée a le même schéma que l'un de vos tables, vous pouvez construire une collection en utilisant ce code (SubSonic 2.1):

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

Si ma procédure stockée retourne tous les champs de une des tables pour lesquelles j'ai un objet SubSonic alors je fais un LoadAndCloseReader sur le résultat de la procédure stockée. Si ma procédure stockée renvoie des données qui ne correspondent pas à un objet SubSonic, je travaille simplement avec lui en tant que jeu de données.

1

Peut-être retourner un lecteur de données, puis itérer pour remplir certains objets personnalisés. Alternativement, le moyen rapide et sale (puisque vous n'utilisez pas la conception par domaine) créer une vue dans la base de données avec la même structure que le proc stocké, puis charger le résultat dans votre ViewObjectCollection similaire au code de John.

0

Vous pouvez faire des lecteurs de données, mais c'est ainsi 1999. Retour des objets est un jeu d'enfant avec SubSonic, et plus facile à utiliser qu'un lecteur de données. Vous pouvez récupérer des objets comme ceci:

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)() 
+2

Beurk. Comment est-ce plus facile qu'un lecteur de données? –

+0

c'est un peu comme link2sql. ça "ne peut pas être plus facile, mais c'est plus facile à lire, et il est fortement typé. –

3

ExecuteTypedList<> est votre meilleur ami dans ce cas:

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

la meilleure réponse ici ne fonctionne pas dans SubSonic 3, ce qui précède. Juste pour info. – Liam

Questions connexes