Question

Dans ma classe personnalisée ObjectContext J'ai mes collections d'entités exposées comme IObjectSet afin qu'ils puissent être testés par unité. J'ai rencontré un problème lors de l'utilisation de cette ObjectContext dans une requête compilé et appelle la méthode d'extension « Inclure » (sur le blog de Julie Lerman http://thedatafarm.com/blog/data-access/agile-entity-framework-4-repository-part-5-iobjectset/ ) et dans son livre 2e édition de programmation Entity Framework sur les pages 722-723. Voici le code:

Requête:

public class CommunityPostsBySlugQuery : QueryBase<IEnumerable<CommunityPost>>
    {
        private static readonly Expression<Func<Database, string, IEnumerable<CommunityPost>>> expression = (database, slug) => database.CommunityPosts.Include("Comments").Where(x => x.Site.Slug == slug).OrderByDescending(x => x.DatePosted);
        private static readonly Func<Database, string, IEnumerable<CommunityPost>> plainQuery = expression.Compile();

        private static readonly Func<Database, string, IEnumerable<CommunityPost>> compiledQuery = CompiledQuery.Compile(expression);

        private readonly string _slug;
        public CommunityPostsBySlugQuery(bool useCompiled, string slug): base(useCompiled)
        {
            _slug = slug;
        }

        public override IEnumerable<CommunityPost> Execute(Database database)
        {
            return base.UseCompiled ? compiledQuery(database, _slug) : plainQuery(database, _slug);
        }
    }

Extension

public static class ObjectQueryExtension
    {
        public static IQueryable<T> Include<T>(this IQueryable<T> source, string path)
        {
            var objectQuery = source as ObjectQuery<T>;
            return objectQuery == null ? source : objectQuery.Include(path);
        }
    }

LINQ to Entities ne reconnaît pas la méthode 'System.Linq.IQueryable1 [MyPocoObject] Inclure [MyIncludedPocoObject] (System.Linq.IQueryable1 [MyPocoObject], System.String)' méthode, et cette méthode ne peut pas être traduit dans un magasin expression.

Si j'utilise cette même requête sur les collections ObjectSet plutôt que IObjectSet il fonctionne très bien. Si je lance simplement cette requête sans précompilant cela fonctionne très bien. Qu'est-ce que je manque ici?

Était-ce utile?

La solution 2

Réponse EF Équipe:

Ceci est un problème connu avec CTP4, Inclure est une méthode d'instance sur ObjectSet mais quand votre jeu est typé IObjectSet que vous utilisez en fait une méthode d'extension sur IQueryable qui est inclus dans CTP4. Cette méthode d'extension ne fonctionne pas avec les requêtes compilées, mais nous allons essayer de soutenir cela dans la prochaine version.

Autres conseils

Je ne sais vraiment pas, mais ont demandé si quelqu'un de l'équipe EF peut répondre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top