0

バックエンドで WebAPI と Entity Framework を使用する PhoneGap/Web/JS モバイル アプリケーションを作成しています。

User テーブルを 4 回参照する Thing というクラスがあります (ChangedByUserId、CreatedByUserId など)。User テーブルは非常に大きい (30 のユーザー関連フィールド)

各呼び出しで渡すデータをできるだけ少なくしたいのですが、これらの UserID 外部キーごとにユーザー名が必要です。(これは、私が必要とするユーザー レコードからの唯一の情報です)。

EF でオブジェクト グラフを使用すると、外部キーごとに FULL ユーザー レコードが返されるため、1 つの Thing オブジェクトが非常に肥大化します。Thing POCO オブジェクトを取得してから、UserID でユーザー名を取得するために複数の呼び出しを行いたくありません。

私が本当にやりたいのは、以下の Thing クラスですが、CreatedByUserName、ChangedByUserName などの各ユーザー名の文字列を持つ、一種のフラット化された DTO オブジェクトです。次に、この DTO をハイドレートされた POCO オブジェクトとして返し、データは小さくなります。

私の質問は次のとおりです。Entity Frameworkを使用してこれを行うにはどうすればよいですか? (関連レコードの戻りデータを制限しますか?)

public partial class Thing
{
    public int ThingId { get; set; }
    public int FromUserId { get; set; }
    public int ToUserId { get; set; }
    public string ThingText { get; set; }
    public int StatusId { get; set; }
    public int ChangedByUserId { get; set; }
    public int CreatedByUserId { get; set; }

    public virtual User FromUser { get; set; }
    public virtual User ToUser { get; set; }
    public virtual User CreatedByUser { get; set; }
    public virtual User ChangedByUser { get; set; }
}
4

1 に答える 1

0

あなたが言ったように、あなたは物事を平らにする必要があります

public class FlatThing
{
    public int ThingId { get; set; }
    public int FromUserId { get; set; }
    public int ToUserId { get; set; }
    public string ThingText { get; set; }
    public int StatusId { get; set; }
    public int ChangedByUserId { get; set; }
    public int CreatedByUserId { get; set; }

    public string FromUserName { get; set; }
    public string ToUserName{ get; set; }
 }

 // assume you have your things

var flatThings = new List<FlatThings>;
foreach (Thing t in things)
    flatThings.Add(new FlatThing{ ThingId = t.ThingId, FromUserId = t.FromUserId,
                                  FromUserName = t.FromUser.Name .....});

return flatThings;
于 2013-06-11T08:28:41.107 に答える