モデルに関連付けられた車両があり、モデルにはメイクに関連付けられています。
これは、私のプロジェクトで LazyLoadingEnabled = false として関連付けに関連する私の汎用リポジトリです。
public IQueryable<T> IncludeMultiple<T1>(params Expression<Func<T, object>>[] associations) where T1 : class { var source = (IQueryable<T>)DbContext.Set<T>(); if (associations != null) { foreach (Expression<Func<T, object>> path in associations) source = DbExtensions.Include<T, object>(source, path); } return source; }
私のAPIコントローラーでは、作業単位パターンを使用しています。ここに私のGetAllメソッドがあります:
public IEnumerable<Vehicle> GetAll() { var vehicles = Uow.VehicleRepository.IncludeMultiple<Vehicle>(c => c.VehicleModel).ToList(); return vehicles; }
すべて正常に動作し、Json は Vehicle クラスのデータと関連する VehicleModel クラスのデータを取得します。
ただし、Vehicle は VehicleMake に直接関連付けられておらず、VehicleModel のみが関連付けられています。今、私の GetAll メソッドがこれを持っている場合:
public IEnumerable<Vehicle> GetAll()
{
var vehicles = Uow.VehicleRepository.IncludeMultiple<Vehicle>(c => c.VehicleModel, c => c.VehicleModel.VehicleMake).ToList();
return vehicles;
}
デバッグで、車両には車両とそれに関連する VehicleModel および VehicleMake データが実際にあることがわかりますが、Fiddler では Http 500 エラーが返されます。
アップデート:
「Test」と呼ばれる別のアソシエーションを Vehicle に追加しました。GetAll メソッドは次のとおりです。
(c => c.VehicleModel、c => c.Test)
エラーはありません。すべてのデータがフィドラー経由で返されました。したがって、「非直接的な関連付け」(つまり、Vehicle -> VehicleMake) がエラーの原因であると思われます。
質問:
関連する車両データとそれに関連するクラスのデータを取得し、Http 500 エラーを発生させずに Json に返す正しい方法は何でしょうか?