我刚刚开始使用Dapper进行我正在进行的项目.我已经启动并运行并进行了一些简单的查询,但是当涉及到连接表和使用splitOn属性时,我有点困惑.
说我有以下查询:
Query<Firm, Firm_FirmType, FirmTypeShareholder, City, Country, Firm>(@"SELECT DISTINCT Firm.*, sh.CustomerID FROM Firm
JOIN Firm_FirmType AS ft ON ft.FirmID = Firm.ID
JOIN FirmTypeShareholder AS sh ON sh.Firm_FirmTypeID = ft.ID
JOIN City ON City.ID = Firm.ZipCode
JOIN Country ON Country.ID = Firm.ISO
JOIN Person_Firm_PersonResponsibility as res ON res.FirmID = Firm.ID
WHERE res.PersonID = " + personId,
(firm, firmType, shareholder, city, country) =>
{
firm.City = city;
firm.Country = country;
firmType.FirmTypeShareholder = shareholder;
firm.Firm_FirmType.Add(firmType);
return firm;
}, splitOn: "ID, ID, Firm_FirmTypeID, ID, ID");
Run Code Online (Sandbox Code Playgroud)
看到我只想实际上从选择所有列Firm的表,只有CustomerID从FirmTypeShareholder表中,究竟应该我splitOn是呢?现在,我已经为我的每个表定义了要拆分的ID,Query<...>这给出了:
使用多映射API时,如果您具有Id以外的密钥,请确保设置splitOn参数
例外.
任何人都可以了解这是如何工作的(以及我做错了什么)?:-) 提前致谢!
经过几个小时的头痛后我发现了:-) 只需命名 ID,我就可以让它工作了:
return conn.Query<Firm, Firm_FirmType, FirmTypeShareholder, City, Country, Firm>(@"SELECT DISTINCT Firm.*, ft.*, sh.CustomerID, ci.ID AS cityId, ci.ZipCode, ci.City, co.ID AS countryId, co.Country FROM Firm
JOIN Firm_FirmType AS ft ON ft.FirmID = Firm.ID
JOIN FirmTypeShareholder AS sh ON sh.Firm_FirmTypeID = ft.ID
JOIN City AS ci ON ci.ID = Firm.ZipCode
JOIN Country AS co ON co.ID = Firm.ISO
JOIN Person_Firm_PersonResponsibility as res ON res.FirmID = Firm.ID
WHERE res.PersonID = " + personId,
(firm, firmType, shareholder, city, country) =>
{
firm.City = city;
firm.Country = country;
firmType.FirmTypeShareholder = shareholder;
firm.Firm_FirmType.Add(firmType);
return firm;
}, splitOn: "ID,ID,CustomerID,cityId,countryId");
Run Code Online (Sandbox Code Playgroud)