Dapper SplitOn 重复 类
Dapper SplitOn Repeating Classes
我担心我可能误解了 Dapper 中的多重映射。
鉴于以下情况:
public class Job
{
public int JobId { get; set; }
public Site FromSite { get; set; }
public Site ToSite { get; set; }
}
public class Site
{
public int SiteId { get; set; }
public string CompanyName { get; set; }
public Address Address { get; set; }
}
public class Address
{
public string Address1 { get; set; }
public string Postcode { get; set; }
}
每个作业将有 2 个 Site
实例,每个实例将有一个 Address
实例
这是扁平化的,我正在尝试将其映射如下:
string sql = @"
select
JOBIdNumber JobId,
fr.SUPKey SiteId,
fr.SUPCompanyName CompanyName,
fr.SUPAddress1 Address1,
fr.SUPPostCode Postcode,
t.SUPKey SiteId,
t.SUPCompanyName CompanyName,
t.SUPAddress1 Address1,
t.SUPPostCode PostCode
FROM tb_JobJob inner Join tb_SUPSupplier fr on JOBFromSiteId = fr.SupKey
inner join tb_SUPSupplier t on t.SUpkey = jobTositeId
where jobidnumber = @JobId
";
var jb = cn.Query<Job, Site, Address, Site, Address, Job>(sql,
(job, fromSite, fromSiteAddress, toSite, toSiteAddress) =>
{
job.FromSite = fromSite;
job.FromSite.Address = fromSiteAddress;
job.ToSite = toSite;
job.ToSite.Address = toSiteAddress;
return job;
},
splitOn: "SiteId,Address1",
param: new { JobId = jobId });
这导致:
When using the multi-mapping APIs ensure you set the splitOn param if
you have keys other than Id
我不确定我是否误解了这个过程,如果是,我该如何映射这个,看起来应该是其他人遇到过的。
您没有提供足够的信息来将结果列拆分为相应的 objects。
string sql = @"
select
1 as JobId,
2 as SiteId,
'Company 1' as CompanyName,
'Address 1' as Address1,
'Postcode 1' as Postcode,
3 as SiteId,
'Company 2' as CompanyName,
'Address 2' as Address1,
'Postcode 2' as PostCode
";
var jb = connection.Query<Job, Site, Address, Site, Address, Job>(sql,
(job, fromSite, fromSiteAddress, toSite, toSiteAddress) =>
{
job.FromSite = fromSite;
job.FromSite.Address = fromSiteAddress;
job.ToSite = toSite;
job.ToSite.Address = toSiteAddress;
return job;
},
splitOn: "JobId,SiteId,Address1,SiteId,Address1");
做这份工作。
splitOn
的意思是“把所有的东西都UP,包括split字段放到各自的object中。因为你有多个child类,你需要定义一个split他们每个人的领域。
我担心我可能误解了 Dapper 中的多重映射。
鉴于以下情况:
public class Job
{
public int JobId { get; set; }
public Site FromSite { get; set; }
public Site ToSite { get; set; }
}
public class Site
{
public int SiteId { get; set; }
public string CompanyName { get; set; }
public Address Address { get; set; }
}
public class Address
{
public string Address1 { get; set; }
public string Postcode { get; set; }
}
每个作业将有 2 个 Site
实例,每个实例将有一个 Address
这是扁平化的,我正在尝试将其映射如下:
string sql = @"
select
JOBIdNumber JobId,
fr.SUPKey SiteId,
fr.SUPCompanyName CompanyName,
fr.SUPAddress1 Address1,
fr.SUPPostCode Postcode,
t.SUPKey SiteId,
t.SUPCompanyName CompanyName,
t.SUPAddress1 Address1,
t.SUPPostCode PostCode
FROM tb_JobJob inner Join tb_SUPSupplier fr on JOBFromSiteId = fr.SupKey
inner join tb_SUPSupplier t on t.SUpkey = jobTositeId
where jobidnumber = @JobId
";
var jb = cn.Query<Job, Site, Address, Site, Address, Job>(sql,
(job, fromSite, fromSiteAddress, toSite, toSiteAddress) =>
{
job.FromSite = fromSite;
job.FromSite.Address = fromSiteAddress;
job.ToSite = toSite;
job.ToSite.Address = toSiteAddress;
return job;
},
splitOn: "SiteId,Address1",
param: new { JobId = jobId });
这导致:
When using the multi-mapping APIs ensure you set the splitOn param if you have keys other than Id
我不确定我是否误解了这个过程,如果是,我该如何映射这个,看起来应该是其他人遇到过的。
您没有提供足够的信息来将结果列拆分为相应的 objects。
string sql = @"
select
1 as JobId,
2 as SiteId,
'Company 1' as CompanyName,
'Address 1' as Address1,
'Postcode 1' as Postcode,
3 as SiteId,
'Company 2' as CompanyName,
'Address 2' as Address1,
'Postcode 2' as PostCode
";
var jb = connection.Query<Job, Site, Address, Site, Address, Job>(sql,
(job, fromSite, fromSiteAddress, toSite, toSiteAddress) =>
{
job.FromSite = fromSite;
job.FromSite.Address = fromSiteAddress;
job.ToSite = toSite;
job.ToSite.Address = toSiteAddress;
return job;
},
splitOn: "JobId,SiteId,Address1,SiteId,Address1");
做这份工作。
splitOn
的意思是“把所有的东西都UP,包括split字段放到各自的object中。因为你有多个child类,你需要定义一个split他们每个人的领域。