C# Silverlight avec Entity Framework - Changement de Type de Retour Sur générée automatiquement EntityQuery?
Arrière-plan
Actuellement, j'ai un C# Silverlight application d'entreprise qui utilise les Services RIA. L'application est hébergée dans ASP.NET à l'aide de la ADO.NET Entity Framework et une classe de service de domaine pour lire et écrire dans la base de données SQL Server.
Scénario
J'ai un serveur-côté de la méthode dans mon DomainServiceClass qui renvoie un IEnumerable liste d'objets.
Dans mon ApplicationName.Web.g.cs fichier j'ai un générée automatiquement la fonction de trop.
Dans mon Client Silverlight Application je veux être en mesure d'exécuter une boucle foreach sur le retour de la liste des objets.
DomainServiceClass Méthode:
public IEnumerable<Image> GetJobImages(string jobGuid)
{
var query =
(
from j in Context.Job
orderby (j.ShortCode)
where j.JobID.Equals(jobGuid)
join a in Context.Audit //.Distinct()
on j.JobID equals a.Job.JobID
join i in Context.Image
on a.Image.JobID equals i.JobID
select new Image
{
HighResUrl = i.HighResUrl,
LowResUrl = i.LowResUrl,
UploadDate = i.UploadDate
}).AsEnumerable();
return query;
}
ApplicationName.Web.g.cs générée automatiquement la Fonction:
///<summary>
///Returns an EntityQuery for query operation 'GetJobImages'.
///</summary>
public EntityQuery<Image> GetJobImagesQuery(string jobGuid)
{
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("jobGuid", jobGuid);
return base.CreateQuery<Image>("GetJobImages", parameters, false, true);
}
Client Silverlight Code D'Invocation:
var context = dds.DomainContext as InmZenDomainContext;
foreach(var item in context.GetJobImagesQuery(currentJob.JobID.ToString())
{
item.etc.....//
}
Problème
Malheureusement, Lorsque j'essaie de l'appeler cette méthode que ci-dessus, je reçois le message d'erreur:
"Impossible de convertir implicitement le type de Système.De Windows.Ria.Les données.EntityQuery du Système.Les Collections.IEnumerable'.
OU
'Ne contient pas une définition publique pour GetEnumerator'.
Après la lecture et de parler à d'autres, j'ai été informé que j'ai besoin de changer le type de retour sur le générés automatiquement à la Fonction (je crois).
Question
Personne ne sait d'une façon dont je peux changer le type de retour de IEnumerable sur ce type de EntityQuery?! - Ou d'un autre moyen de résoudre ce problème?
Tentative de la manière suivante:
///<summary>
///Returns an EntityQuery for query operation 'GetJobImages'.
///</summary>
public IEnumerable<Image> GetJobImagesQuery(string jobGuid)
{
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("jobGuid", jobGuid);
return base.CreateQuery<Image>("GetJobImages", parameters, false, true);
}
(Cela échoue, puisque la méthode est généré automatiquement, il vient de ressorts à ce qu'il utilisé pour être quand j'ai créer la solution.)
Aider grandement apprécié.
- C'est agréable de voir des questions si bien formé...
Vous devez vous connecter pour publier un commentaire.
Le problème est que vous êtes en manque une étape entre votre appel et de la collection IEnumerable.
Vous devrez exécuter la EntityQuery et l'utilisation LoadOperation pour obtenir vos résultats. Ce n'est pas aussi simple que vous le pensez, et voici un bon post sur le forum qui est un exemple de la façon de traiter les choses:
Comment obtenir une Liste<> à partir de LoadOperation
Voici la ligne de l'exemple:
Vous devez charger la requête et obtenir les résultats de l'opération de chargement. Votre client Silverlight invocation code doit être modifié en quelque chose comme ceci:
Noter que tous les "appels de réseau" sont asynchrones dans Silverlight.
Je dirais aussi que vous envisager de changer le paramètre de requête à partir d'une chaîne dans un GUID.
DomainContext.Load
méthode. J'espère que le code est correct. maintenant.context.Load
. Prochain point de rupture est enGetJobImagesQuery
. Assurez-vous que cette méthode retourne un non-vide de la collection. Troisième point d'arrêt est dans laCompleted
lambda. LeloadOperation.Entities
doit contenir le côté client versions des entités retournées parGetJobImagesQuery
. Si vous êtes vraiment désespéré, vous pouvez également utiliser un outil comme un violon pour voir les données sur le fil. Si vous utilisez le serveur web intégré, vous devrez ajouter un point après localhost pour voir le trafic dans un violon.