2015-05-10 46 views
4

我剛剛開始使用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"); 

看到,因爲我只希望真正從Firm表中選擇所有列只有從FirmTypeShareholderCustomerID,究竟應該我splitOn是呢?現在,我已經定義了ID,以拆分爲每個表在我Query<...>其中給出了這樣的:

當使用多地圖API確保您設置的splitOn PARAM如果你有多個id其他鍵

異常。

任何人都可以說明這是如何工作(以及我做錯了什麼)? :-) 提前致謝!

回答

4

找到了自己小時頭痛:-)通過簡單地命名的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"); 
+1

'WHERE res.PersonID =「+ personId':請爲愛.. 。使用查詢參數! – RobIII

+0

是的,當然.. :-) –