了解Dappers splitOn属性

Bo *_*sen 5 c# t-sql dapper

我刚刚开始使用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的表,只有CustomerIDFirmTypeShareholder表中,究竟应该我splitOn是呢?现在,我已经为我的每个表定义了要拆分的ID,Query<...>这给出了:

使用多映射API时,如果您具有Id以外的密钥,请确保设置splitOn参数

例外.

任何人都可以了解这是如何工作的(以及我做错了什么)?:-) 提前致谢!

Bo *_*sen 3

经过几个小时的头痛后我发现了:-) 只需命名 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)

  • `WHERE res.PersonID = " + personId`:请使用查询参数! (15认同)