J'ai besoin de conseils avec un problème, j'utilise l'entité Framework 4.0, j'ai une DAL et BLL et je suis obligatoire pour ObjectDataSource sur la page.
J'ai dû écrire une procédure stockée à l'aide de Quelqu'un peut-il pointer Un bon moyen de faire cela et de définir ma fonction? Avec quelques exemples de code s'il vous plaît. P> J'ai lu que je devrais essayer d'utiliser Je n'ai pas beaucoup travaillé avec des génériques beaucoup, si vous pouviez indiquer comment faire cela, je suis sûr que cela serait utile pour beaucoup de personnes. Veuillez fournir des exemples de code pour la fonction et comment lier Votre aide est grandement appréciée !! p> Merci pour votre aide Richard C'est ce que ma fonction ressemble maintenant à votre suggestion d'utilisation de dbdatarecord em> C # Fonction pour pivot code> et dynamique SQL pour renvoyer les données de plusieurs entités comme je veux. Maintenant, j'essaie de comprendre comment puis-je obtenir l'entité framework pour renvoyer un objet personnalisé que je peux lier à mon
ObjectDatasource code> sur la page, j'ai besoin d'utiliser un objet personnalisé ou un objet dynamique depuis le stockage stocké. la procédure peut renvoyer n'importe quel nombre de colonnes afin que je ne puisse pas utiliser une classe ou une entité fortement dactylographiée et je dois également être capable de le lier avec un objet
objetDatasource code>. p>
list
objetdatasource code> à l'objet de retour? P>
ObjectDataSource Code> dans DAL P>
<asp:ObjectDataSource ID="ODSProductAvailability" runat="server"
TypeName="Project.BLL.ProductBL"
SelectMethod="GetData" >
<SelectParameters>
<asp:SessionParameter Name="product_id" SessionField="ProductID" />
</SelectParameters>
</asp:ObjectDataSource>
3 Réponses :
Si vous avez déjà un type d'entité qui correspond à votre type de retour Proc, utilisez-le comme paramètre Type.
using (SqlConnection connection = new SqlConnection("your connection string")) { SqlCommand command = new SqlCommand( "exec spGetProductsByGroup @ProductID", connection); command.Parameters.Add(product_id); connection.Open(); SqlDataReader reader = command.ExecuteReader(); List<ProcType> list = new List<ProcType>(); if (reader.HasRows) { while (reader.Read()) { list.Add(new ProcType(){Property1 = reader.GetInt32(0), Property1 = reader.GetString(1)); } } reader.Close(); return list; }
Non, c'est le problème que le Proc stocké obtient des données de plusieurs entités et l'affiche dans un format différent, je ne peux pas le retourner avec un type d'entité, avez-vous des exemples d'utilisation de digne d'information comme vous avez mentionné? Ou existe-t-il un meilleur moyen de générer CustomObject à partir des résultats de retour Proc?
Je ne suis pas sûr de l'utilisation d'un type de non-entité, mais j'ai ajouté un exemple de datareader. Voir le lien ci-dessus pour des exemples plus généraux.
Qu'en est-il de quelque chose comme ceci:
Si vous souhaitez présenter les résultats en disant une grille de grille, vous êtes presque là-bas, vous êtes presque là-bas - avec les colonnes de liaison et d'autogénère, car l'objetQuisery est un iNeumable. J'utilise l'objetQuisery mais vous pouvez échanger cela avec exécucestorequerery - car ils renvoient tous deux un iNaumerable dans xaml p> et vous 'LL Voir les colonnes qui sont renvoyées directement dans l'interface utilisateur. p> Si vous n'utilisez pas WPF et que vous souhaitez une liste em> de vos éléments, tout ce que vous avez à faire est: P> foreach (var rec in context.ExecuteStoreQuery<DbDataRecord>("exec spGetProductsByGroup @ProductID={0}", product_id))
{
for (var ri = 0; ri < rec.FieldCount;ri++)
{
Console.WriteLine(rec.GetDataTypeName(ri)
+" " + rec.GetName(ri)
+" = " + rec.GetValue(ri));
}
}
Merci pour votre réponse Richard j'ai essayé de faire votre suggestion pour Var MyList = Context.ExecutestoreQuery
@Shokwave pour créer la liste DO DISPONIBLESPRODUCTS = groupdata.tolist (); - Vous n'avez pas besoin de le dire le type qu'il va le comprendre.
Ok c'est bon mais à quoi ressemble la signature de la fonction dans la classe DAL Classe et de la couche d'entreprise? Jusqu'à présent, j'ai essayé la liste
Liste
J'ai essayé la signature de la fonction comme vous l'avez mentionnée et cela me donne toujours l'erreur suivante Var Var MyList = Context.ExecutestoreQuery
Bonjour, comment avez-vous résolu votre problème?
Le type de résultat 'system.data.common.dbdatarecord' peut ne pas être abstrait et doit inclure un constructeur par défaut code>
Vous ne pouvez pas utiliser dbdataRecord avec exécutantestorequery. Si vous ne pouvez pas définir les colonnes renvoyées par la requête, vous devez utiliser SQLDatreader. Si vous êtes capable de définir les colonnes renvoyées, créez une classe et utilisez-la pour matérialiser la requête.