0

親子関係にいくつかのエンティティがあります: ファミリー (親) と更新プログラム (子)。対応する更新のないファミリのリストを読みたいです。17 ファミリしかありませんが、約 60,000 の更新があるため、更新は本当に必要ありません。

EntitiesToDTOsを使用して、Family エンティティから DTO を生成し、Family エンティティを FamilyDTO に変換するためのアセンブラーを作成しました。アセンブラの ToDTO メソッドは次のようになります。

public static FamilyDTO ToDTO(this Family entity)
{
    if (entity == null) return null;

    var dto = new FamilyDTO();

    dto.FamilyCode = entity.FamilyCode;
    dto.FamilyName = entity.FamilyName;
    dto.CreateDatetime = entity.CreateDatetime;
    dto.Updates_ID = entity.Updates.Select(p => p.ID).ToList();

    entity.OnDTO(dto);

    return dto;
}

アセンブラを実行すると、結果の各 FamilyDTO に Updates_ID リストが設定されていることがわかりますが、EF モデル (edmx ファイル) では遅延読み込みが true に設定されています。子要素の遅延読み込みをサポートするように EntitiesToDTOs を構成することは可能ですか? それとも常に熱心な読み込みを使用しますか? アセンブラの生成時に遅延読み込みをサポートするように設定できるオプションが EntitiesToDTOs にありません。

ところで、私はEntitiesToDTOを使用してほぼ毎日アセンブラを再生成する大規模なチームの一員であるため、可能であればアセンブラを手作業で変更したくないと考えています。

4

2 に答える 2

9

私はEntitiesToDTOsの作成者である Fabian です。

初めまして、ご利用ありがとうございます。

あなたが検出したことは、実際にはアセンブラーにさせたくないことです。開発者は、必要な場合にのみ、部分メソッドOnDTOおよびOnEntityを使用してナビゲーション プロパティをマップする必要があります。そうしないと、あなたのような問題に遭遇します。

ツールを使用してその問題に遭遇したことはないようです。ありがとうございます。

だから今、私はこれを修正しています。バージョン 3.1で修正されました。

于 2013-03-05T00:43:35.640 に答える
1

ここに投稿したコードに基づいて、誰かがそのようなソリューションをどのように実装すると思うか (つまり、レコードを DTO 形式に変換する) に基づいて、熱心な読み込みを行うしかないと思います。

重要なポイント:

1)あなたのUpdates_IDフィールドは明らかにリストです。つまり、コレクションがすぐにハイドレートされます(ToListは常に実行されます。通常のIEnumerableのみが遅延実行を採用しています)。

2) DTO に何らかの種類のナビゲーション プロパティを貼り付けている場合、自動的に熱心に読み込まれます。これは、Entity Framework によって戻されたナビゲーション プロパティに触れるだけで、フレームワークがデータベースから自動的にそれをロードし、DTO にデータを入力することだけが必要であることを気にしないためです。

于 2013-03-04T22:10:18.187 に答える