2011-08-16 16 views
20

私は住所オブジェクトを含む会社を持っています。 SQLの戻り値はフラットですが、クエリ<を取得してすべてのオブジェクトをロードするようにしています。dapper -multi-mapping:フラットSQLはネストされたオブジェクトに戻ります

cnn.Query<Company,Mailing,Physical,Company>("Sproc", 
        (org,mail,phy) => 
        { 
         org.Mailing = mail; 
         org.Physical = phy; 
         return org; 
        }, 
        new { ListOfPartyId = stringList }, null, true, commandTimeout: null, 
        commandType: CommandType.StoredProcedure, splitOn: "MailingId,PhyscialId").ToList(); 

SplitOnが正しいかどうかわかりません。素晴らしいことだsplitOn

提案:

マルチマッピングAPIを使用して、あなたがIDパラメータ名以外のキーを持っている 場合はsplitOnのPARAMを設定し確認してください。私はメッセージを取得しています。

Test.csの例は、コードがクエリのパラメータとして要求するものではありません。これらは更新する必要があります

+1

sproc呼び出しで返された結果セットの列を投稿できますか? SplitOnの列が結果セットに存在することを確認する必要があります – bdowden

+2

MailingIdが返されます。 procのすべての戻り値は、オブジェクトのプロパティ/フィールドです。 – Arnej65

+1

dapperのマルチマッピングに最適な答え。 http://stackoverflow.com/questions/7472088/correct-use-of-multimapping-in-dapper/7478958#7478958 – CPhelefu

答えて

15

これは完璧に動作します...おそらくタイプミスですか?

PhyscialIdは間違いなく1のように見えます。

class Company 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public Mailing Mailing { get; set; } 
    public Physical Physical { get; set; } 
} 

class Mailing 
{ 
    public int MailingId { get; set; } 
    public string Name { get; set; } 
} 

class Physical 
{ 
    public int PhysicalId { get; set; } 
    public string Name { get; set; } 
} 

public void TestSOQuestion() 
{ 
    string sql = @"select 1 as Id, 'hi' as Name, 1 as MailingId, 
     'bob' as Name, 2 as PhysicalId, 'bill' as Name"; 
    var item = connection.Query<Company, Mailing, Physical, Company>(sql, 
       (org, mail, phy) => 
       { 
        org.Mailing = mail; 
        org.Physical = phy; 
        return org; 
       }, 
        splitOn: "MailingId,PhysicalId").First(); 


    item.Mailing.Name.IsEqualTo("bob"); 
    item.Physical.Name.IsEqualTo("bill"); 

} 
+0

私はSplitOnは、これらの値によって設定されたリターンを分割していることを誤解。それは今働いている。しかし、私はあなたが上記のように正確な構文を使用することはできません。 CommandType、バッファーフラグなどを指定する必要があります。 – Arnej65

+1

データベースクエリに左外部結合があり、物理情報が存在しない/ nullの可能性がある場合、私はそれがうまくいくと思いました。これはまだ動作しますか? – Marko

関連する問題