3

カスタム ObjectContext クラスでは、エンティティ コレクションを IObjectSet として公開しているため、単体テストを実行できます。コンパイルされたクエリでこの ObjectContext を使用し、"Include" 拡張メソッドを呼び出すと、問題が発生しました (Julie Lerman のブログhttp://thedatafarm.com/blog/data-access/agile-entity-framework-4-から) repository-part-5-iobjectset/ ) および彼女の著書 Programming Entity Framework 2nd edition の 722-723 ページにあります。コードは次のとおりです。

クエリ:

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);
        }
    }

拡大

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 はメソッド 'System.Linq.IQueryable1[MyPocoObject] Include[MyIncludedPocoObject](System.Linq.IQueryable1[MyPocoObject], System.String)' メソッドを認識せず、このメソッドはストア式に変換できません。

IObjectSet ではなく ObjectSet コレクションでこの同じクエリを使用すると、正常に動作します。プリコンパイルせずにこのクエリを実行すると、正常に動作します。ここで何が欠けていますか?

4

2 に答える 2

1

EFチームによる回答:

これはCTP4の既知の問題です。インクルードはのインスタンスメソッドですが、実際に拡張メソッドを使用しているObjectSetときにセットを入力すると、CTP4に含まれます。この拡張メソッドはコンパイルされたクエリでは機能しませんが、次のリリースでこれをサポートする予定です。IObjectSetIQueryable

于 2010-12-01T20:47:33.997 に答える
1

本当にわかりませんが、EF チームの誰かに答えてもらえないかと尋ねました。

于 2010-11-16T19:52:43.403 に答える