dapper -multi-mapping: плоский sql возврат к вложенным объектам
У меня есть компания, которая содержит адресный объект. Возврат 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 многократного отображения убедитесь, что вы установили параметр splitOn, если у вас есть ключи, отличные от имени параметра Id: 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");
}