dapper -multi-mapping:フラットSQLはネストされたオブジェクトに戻ります

c# dapper

質問

私はアドレスオブジェクトを含む会社を持っています。 SQLの戻り値はフラットなので、すべてのオブジェクトをロードするためにQuery <>を取得する必要があります。

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が正しいかどうかわかりません。私はメッセージを得ている:

マルチマッピングAPIを使用する場合は、Id以外のキーがある場合はsplitOnパラメータを必ず設定してください。パラメータ名:splitOn

提案は素晴らしいだろう。

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

受け入れられた回答

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

私は間違いなく1のように見えるPhyscialIdを参照してください。

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");

}


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ