0

Je suis le tutoriel de scott gu de Here pour récupérer les données en utilisant la procédure stockée. Je définis le type de retour de la procédure stockée en supprimant le SProc sur la classe. Maintenant, ma question est que pouvons-nous définir viewmodel comme le type de retour de la procédure stockée, comme mon affichage est fortement tapé avec mon viewmodelViemodel avec procédure stockée

Répondre

0

J'ai écrit une vue de base de données au lieu de viewmodel, puis faites glisser l'affichage vers dbml et définissez le type de retour de la procédure stockée à afficher. Cela résout mon problème. Il peut être utile pour quelqu'un d'autre

0

Vous pouvez associer le type de retour de la procédure stockée à un type personnalisé: In .edmx Cliquez sur la procédure stockée importée et définissez le nom d'importation de la fonction sur SomeCustomName et sélectionnez le type de retour -> Entités -> SomeEntity. Maintenant que la procédure stockée renvoie des modèles d'entité, vous pouvez mapper ces modèles à un modèle de vue qui est finalement renvoyé à la vue. Il est considéré comme une bonne pratique d'avoir des modèles de vue adaptés aux vues au lieu de passer directement les objets de transport SQL.

+0

J'utilise linq à sql – Tassadaque

-1

[Je dois encore faire quoi que ce soit avec ASP.NET MVC, cette suggestion peut-être loin, mais ...]

Une option serait de créer votre classe ViewModel dans votre concepteur dbml en allant à droite -Click-> Ajouter-> Classe. Puis, supprimez votre procédure stockée sur la nouvelle classe dans le concepteur, ou si cela échoue (comme cela arrive souvent, pour moi), déposez la procédure stockée sur la surface du concepteur et définissez son type de retour (Propriétés -> Type de retour) la nouvelle classe.

C'est une façon d'avoir une procédure stockée retourner un type personnalisé qui est pas une véritable entité LINQ to SQL et pas une procédure stockée autogénérée * Classe de résultat. (Depuis que j'ai entendu dire que c'est mal de passer les objets du modèle à la vue - idéalement, vous passez un objet ViewModel, n'est-ce pas?).

+0

chaque fois que dbml sera recréé cette classe sera effacée .. – Tassadaque

+1

Je ne suggère pas de créer la classe dans votre fichier .Designer.cs - sûrement n'importe quoi créé manuellement * sera * supprimé * lors de la prochaine sauvegarde de dbml. Ce que je suggère est de créer la classe dans le concepteur entity/dbml, tout comme vos classes d'entités LINQ to SQL normales. Sauf au lieu de créer la table en faisant glisser la table de la base de données sur la surface, il vous suffit de créer la classe en utilisant la procédure clic-droit-> Ajouter-> Classe que j'ai mentionnée. Tout élément créé dans le concepteur à l'aide de cette méthode sera conservé lors de la régénération du fichier .Designer.cs. – shaunmartin