1

汎用リポジトリがあり、DoQuery メソッドを使用してデータベースからオブジェクトを選択する場合、外部キーであるフィールドの代わりに null を取得しないように、関連するエンティティの一部をロードする必要があります。

問題は、リポジトリが汎用的であるため、ロードする必要があるプロパティの数やその名前がわからないことです (それらを取得する方法がない限り)。まだこのリポジトリを一般的なままにしていますか?

DoQuery メソッドは次のとおりです。

    public ObjectQuery<E> DoQuery(ISpecification<E> where)
    {
        ObjectQuery<E> query = (ObjectQuery<E>)_ctx.CreateQuery<E>("[" + typeof(E).Name + "]").Where(where.EvalPredicate);
        return query;
    }

また、リポジトリ全体の元のコードへのリンク。

私は以前にこれを投稿しましたが、それに対する答えは得られませんでしたが、人々が私がプロパティ名を知っていてできると想定する前から、これはもう少し関連性があると思います:

.Include("PropertyNameIKnowNeedsToBeLoaded")

これは、私が以前に投稿した質問です。うまくいけば、これで私がどこにいるのかについて少し情報が得られます。

どんな助けでも大歓迎です。

ありがとう、
マット

4

3 に答える 3

0

私は次の方法でこの問題を解決しました:

 public IQueryable<E> GetAll()
        {
            Type et=typeof(E);
            ObjectQuery<E> oq=_context.CreateQuery<E>("[" + typeof(E).Name + "Set]");

            foreach(System.Reflection.PropertyInfo pi in et.GetProperties())
            {
                if (pi.PropertyType.Name.Contains("EntityCollection"))
                        oq=oq.Include(pi.Name);

            }

            return oq.AsQueryable();
        }

しかし、それは鋼がディッパーの関係に問題を抱えています。だから鋼はこの問題について考えています

于 2009-12-30T10:54:25.427 に答える
0

フェッチする深さをメソッドに渡して、コントロールを反転する必要があります。私は Entity フレームワークについて、正確にそれを行う方法を十分に理解していません。フェッチの深さを表す整数を渡すことができ、メソッドはその深さに関連するエンティティを使用してクエリを作成する方法を見つけ出すことができます。

于 2009-12-23T04:22:48.100 に答える
0

タイプのリレーション終了名を取得し、すべてのリレーションに対して Include を呼び出すことができます。

    public ObjectQuery<E> DoQuery<E>(ISpecification<E> where) where E : new()
    {
        ObjectQuery<E> query = (ObjectQuery<E>)_ctx.CreateQuery<E>("[" + typeof(E).Name + "]").Where(where.EvalPredicate);

        IEntityWithRelationships entityWithRelationship = (IEntityWithRelationships)(new E());
        IEnumerable<IRelatedEnd> relatedEnds = entityWithRelationship.RelationshipManager.GetAllRelatedEnds();
        foreach (IRelatedEnd end in relatedEnds)
        {
            query= query.Include(end.TargetRoleName);
        }

        return query;
    }

クエリされた型から IEntityWithRelationships を取得する必要があるため、「新しい」一般的な制約を追加しました。これが役立つことを願っています。

于 2009-12-23T10:41:33.513 に答える