タイトルはすべてそれを使用しようとしていますが、わかりません。問題は私がアマチュアであるために知識が不足している可能性がありますが、私はこの事について約12の質問を読んで3日間グーグルで調べましたが、それでも理解できません。Dapperのマッピング、マルチマッピング、QueryMultipleを理解できません
私は多くの質問をしているので、1つの質問だけですべてを書くべきか、誰かがそれをすべて読んでもよいとは思えません。誰かが他の解決策を持っている、あるいは私が別の質問でそれを分割すべきだと思うなら...まあ、私は提案に開放されています。
私は例を書こうとしていましたが、もう一度何十もの例を読み、私を助けませんでした。
私はちょうど私の心はgithubの時の例のようなものをどのように機能するかを理解するために作ることができない。
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;});
ので、Post
はタイプUser
の性質を持っており、そのプロパティを右、Owner
呼ばれているのですか?ような何か:
public class Post
{
...
public User Owner { get; set;}
}
したがってQuery<Post, User, Post>
は、すべてのプロパティと何ではないとPost
インスタンスを返し、User
インスタンスを作成し、Post.Owner
プロパティに割り当てますか?たとえば、のようなIDを...WHERE Id = @Id", new {Id = id}
のように渡したい場合など、単純なパラメータをどのようにクエリに追加すればよいでしょうか?パラメータが今すぐ(post, user) => { post.Owner = user; return post;}
の場合は追加する必要がありますか?パラメータは常に指定された型を参照し、動的問合せには単純な典型的なパラメータのみを使用できますが、両方を同時に使用できますか?どうやって?
また、どのDBフィールドがどのオブジェクトになるのかを区別するにはどうすればよいですか?それはクラス名= DBテーブル名のようなものになりますか?クラスがDBテーブルと同じ名前を持たず、[Table]
属性を使用したい場合はどうなりますか、それとも属性はDapper.Contrib.Extensions
メソッドのためだけですか?同じDBテーブルを共有するオブジェクトでも動作しますか?
異なるオブジェクトの同じテーブルに関する質問、f.i.
public class Person
{
...
public BankAccount Account {get; set;}
...
}
public class BankAccount
{
private string _Account;
public string Account
{
get { return _Account; }
set
{
if(!CheckIfIBANIsCorrect(value))
throw new Exception();
_Account = value;
}
}
private bool CheckIfIBANIsCorrect(string IBAN)
{
//...
//Check it
}
}
すべての人が人のIdで呼ばれる単一のアカウントを持っているであろうから、私は、Person
より同じテーブルで文字列のアカウントを保存することができます:私はBankAccount
オブジェクトを持っているPerson
オブジェクトを持って言うことができます。どのようにマップする必要がありますか?方法はありますか?単に結果を動的オブジェクトにロードしてすべてのオブジェクトを作成すると、Query
オブジェクトの残りの部分が作成され、自分で入れ子オブジェクトを作成する必要がありますか?
ところで、splitOn
はどうしてこの中で使われていますか? Ids f.iで結果を分割できるように、結果をさまざまな「グループ」に分割する必要があることを理解しています。あなたが必要とするものを取るが、私はどのように私は異なる "グループ"から情報を取得する必要があり、どのように別の "グループ"、リスト、列挙型、何を返すか理解していない。
QueryMultiple
私が読んだ質問と回答のどれくらいが私の理解を超えてFARなのですか? あなたは知っているのですが、どうすれば.Read
ものが効くのですか?私がここで読んだこと、またはグーグルグーグルでは、Read
は、オブジェクト間を奇妙に識別できる何らかのオートマチックなものだと仮定しています。繰り返しますが、クラス名で結果を分割するので、すべてのオブジェクトが正しいテーブル名を持つようにする必要があります。この場合、[Table]
属性の場合はどうなりますか?
私は問題があると思うのですが(それは存在しないと思います)、それをすべて記述する単一のWebページ(GitHubの例は非常に乏しい)です。私が理解しようとしているものに正確に答えることのできない具体的なケースへの回答を見つけることができますが、それを読んでいるうちにますます混乱する具体的なケースだけです。どうやって。
「クエリ」はちょうどオーバーロードされています。しかし、mapパラメータは、結合されたテーブルを持つクエリの場合にのみ使用されるか、または同じDBテーブルに格納されたネストされたクラスにデータを挿入するために使用できますか? F.i.私が質問した 'Person'の例、または同じ' Product' -'Category'を使って同じテーブルにすべてのデータを保存しています。 – Nox
QueryメソッドでF12キーを押すと、すべてのオーバーロード、引数、およびドキュメンテーションのコメントを見ることができます。 1つのタイプのみのクエリ呼び出しのための "マップ"引数がありますが、これは個々のフィールドをプロパティにマッピングするためのものです。これは多くの手動作業です。 Dapperは、1つのテーブルからネストされたクラスへのマッピングをサポートしていません(Dapperの作者の回答http://stackoverflow.com/a/7523274/3813189を参照してください)。 –
私はあなたの前にこのコメントを書いた、私はそれを読むでしょう。 – Nox