[解決済み] Dapperでネストされたオブジェクトのリストをマッピングする方法
2022-04-29 06:48:41
質問
現在、データベースへのアクセスにEntity Frameworkを使用していますが、Dapperを見てみたいと思っています。このようなクラスがあります。
public class Course{
public string Title{get;set;}
public IList<Location> Locations {get;set;}
...
}
public class Location{
public string Name {get;set;}
...
}
つまり、1つのコースを複数の場所で教えることができるのです。Entity Frameworkは私のためにマッピングを行うので、私のコースオブジェクトは場所のリストで入力されます。Dapperでどのようにこれを行うのでしょうか?それは可能なのでしょうか、それともいくつかのクエリステップで行う必要があるのでしょうか?
どのように解決するのですか?
Dapperは本格的なORMではないので、クエリなどのマジック生成は行いません。
あなたの特定の例では、おそらく次のように動作します。
コースを取得します。
var courses = cnn.Query<Course>("select * from Courses where Category = 1 Order by CreationDate");
関連するマッピングを取得する。
var mappings = cnn.Query<CourseLocation>(
"select * from CourseLocations where CourseId in @Ids",
new {Ids = courses.Select(c => c.Id).Distinct()});
関連する場所を取得する
var locations = cnn.Query<Location>(
"select * from Locations where Id in @Ids",
new {Ids = mappings.Select(m => m.LocationId).Distinct()}
);
マップを作成する
読者に任せて、いくつかのマップを作成し、コースに場所を入力することを繰り返します。
注意事項
その
in
が少ない場合は、このトリックは有効です。
2100
ルックアップ(Sql Server)、それ以上の場合は、クエリを次のように修正します。
select * from CourseLocations where CourseId in (select Id from Courses ... )
この場合、すべての結果を一度に取り出すには、次のようにします。
QueryMultiple
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン