0

Wines / Vineyardプロジェクトで循環参照を回避するために、すべての手順に従いました。しかし、私は望まないデータを取得しています:

ここに画像の説明を入力してください

提携ブドウ園があるワインのすべてのリストに、ブドウ園がワインごとにリストされるたびに、すべてのワインのリストが表示されるようにしたくありません。どうすればこれを止めることができますか?匿名タイプはやりたくない。

アップデート:

私のDbContext:

    public DataContext()
    {
        Configuration.LazyLoadingEnabled = false;
        Configuration.ProxyCreationEnabled = false;
    }

私のルート構成:

        config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

私のコントローラー:

var response = context.Wines.Include( "Vineyard")。ToList();

4

1 に答える 1

0

データをどのようにシリアル化しますか?

winesコレクションプロパティをシリアル化しないでください。シリアル化メカニズムに応じて、属性でマークを付ける(つまりScriptIgnore)か、具体的な型を定義して(匿名型が好きではないため)、AutoMapperを使用してデータをコピーできます。

EFエンティティをAPIの応答に直接バインドすることは、設計上の最良の選択ではありません。dbスキーマを変更するたびに、APIが変更されます。APIコントローラーが返す個別のクラスを定義し、AutoMapperを使用してデータをコピーすることができます。このようにして、DBスキーマをAPIから切り離します。

namespace API {
    class Wine {
        // properties that you want to return goes here
    }
}

Mapper.CreateMap<Wine, API.Wine>(); // Only once during app start
Mapper.Map<Wine, API.Wine>(wine); // AutoMapper will copy data using conventions
于 2012-12-20T22:18:27.700 に答える