Mon modèle EF a été généré à partir de ma base de données SQL Server. J'ai ensuite généré un DomainService pour RIAServices par rapport au modèle EF. L'une des entités est appelée "EntryCategories". Le DomainService a créé cette méthode:RIAServices types non pris en charge sur DomainService construit manuellement
public IQueryable<EntryCategories> GetEntryCategoriesSet()
{
return this.Context.EntryCategoriesSet;
}
Depuis mon modèle d'affichage de l'interface utilisateur semble tout à fait différent du modèle physique, j'ai décidé d'écrire mon propre DomainService pour cela et des entités apparentées. Oui, je sais que nous sommes censés modifier la génération mais il y a tellement de choses là-dedans et je voulais me concentrer sur une petite chose.
J'ai enlevé le EnableClientAccess attribut du produit DomainService et a ajouté une nouvelle classe appelée ClientDomainService et encapsulées en elle le produit DomainService:
[EnableClientAccess()]
public class ClientDomainService : DomainService
{
// the generated domain service encapsulated in my new one.
private DataDomainService _dcds = new DataDomainService();
// reimplement one of the DataDomainService methods
public IQueryable<EntryCategories> GetEntryCategories()
{
return (from t in _dcds.GetEntryCategoriesSet() where t.EntryCategoriesVersions.EntryCategoriesVersionId == datahead.EntryCategoriesVersions.EntryCategoriesVersionId orderby t.DisplayOrder select t);
}
}
La chose poing j'ai essayé est de ré-écrire la méthode GetCateogoriesSet mais avec les données sous-jacentes filtrées en fonction d'une autre entité de ma classe (non représentée). Mais quand je construis cela, une erreur apparaît:
Entity 'DataProject.Web.EntryCategories' has a property 'EntryCategoriesVersionsReference' with an unsupported type
Si je commente mon CientDomainService, remplacer le EnableClientAccess attribut généré DomainService et placez le filtrage analogue LINQ dans la méthode GetEntryCategoriesSet d'origine, le projet compile sans erreurs.
Quel est si spécial sur le DomainService généré que mon nouveau n'a pas? Est-ce le fichier metadata.cs?
La réponse de Tor Haugen a fonctionné pour moi. Je n'ai pas encore assez de représentant pour remettre sa réponse à plus tard. Je devrais noter que j'ai créé une classe de base pour mon contexte de domaine de service RIA que je peux réutiliser à travers différents projets, et la classe qui définit réellement les entités est celle que j'ai l'attribut [LinqToEntitiesDomainServiceDescriptionProvider]. Par conséquent, la référence à l'objectcontext n'est pas un gros problème (pour moi), puisque je référence directement les entités de ce context-object spécifique. Merci pour votre aide! –
Pour plus d'explications sur les façons dont ce problème peut se produire, lisez ce fil de discussion. http://forums.silverlight.net/p/233457/583536.aspx –