2017-08-28 11 views
0

私はSQL ServerとDapperを使用しています。モデルオブジェクトをデータベースに適切に格納して取得したいと思います。SQL ServerとDapperを使用したMapオブジェクトのリスト

これは私のモデルです。guidリストは、他のモデルのGenerator IDのリストです。

public class GeneratorSet 
{ 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public List<Guid> GeneratorsList { get; set; } 
} 

私の目標は、このオブジェクトをSQL Serverテーブルに正しくマップし、Dapperを使用してデータベースからオブジェクトを正しく取得することです。関係は多くのものか​​ら多くのものです(多くの発電機を所有することができ、多くの発電機が発電機を所有する可能性があります)。

+0

試しましたか?あなたの問題は何ですか? – Milney

+0

私は、テーブル行をvarcharとして設定しようとしましたが、各guidがカンマで区切られたリストを文字列に格納しようとしました。そして、dapperを使って重いマッピングをします。しかしそれはよく見てプロフェッショナルではありません。私は 'var generatorSet = connection.QueryFirst (" SELECT * FROM GeneratorSet WHERE Id = @ID; "、新しい{ID = Id})のような基本的なマップを使用する方法を目指しています。「 – Erexo

答えて

2

SplitOnパラメータを使用してこれを行うことができます。ここにはガイドがあります。固有の名前を有するラムダを用いてマッピングすることによって

https://taylorhutchison.github.io/2016/03/23/dapper-orm-complex-queries.html

それとも - マニュアル(https://github.com/StackExchange/Dapper)から、実施例を用いて、

var sql = 
@"select * from #Posts p 
left join #Users u on u.Id = p.OwnerId 
Order by p.Id"; 

var data = connection.Query<Post, User, Post>(sql, (post, user) => { post.Owner = user; return post;}); 
var post = data.First(); 

Assert.Equal("Sams Post1", post.Content); 
Assert.Equal(1, post.Id); 
Assert.Equal("Sam", post.Owner.Name); 
Assert.Equal(99, post.Owner.Id); 

私はあなたのデータベーススキーマを知らないように私は実際のコード/クエリを記述することはできません...しかし、うまくいけばあなたのアイデアを得ますか?

+1

はい、私あなたの指示のために私が欲しいものをすることができました。ありがとう! – Erexo

関連する問題