2015-04-16 24 views
0

我有其經由dapper.net問題與spliton加入

var resultList = sqlCon.Query<UserProfile, UserAddress, UserProfile>(@" 

          UPDATE [User].[User_Profile] 
           SET ProfileStatus = 4 
          WHERE Id = @UserId 

          SELECT u.Id [UserId], u.Username, u.Age, 
            u.ProfileStatus, 
            a.Id [AddressId], a.Country, a.[State], a.City, 
            a.Latitude, a.Longitude 
          FROM [User].[User_Profile] u 
          INNER JOIN [User].[User_Address] a on u.id = a.UserId 
          WHERE u.Id = @UserId", (u, a) => 
          { 
           u.Id = a.UserId; 
           return u; 
          }, 
          new { UserId = userId }, splitOn: "UserId").FirstOrDefault(); 

運行時,它我收到此錯誤執行以下SQL查詢:

當使用多映射的API確保您設置的splitOn PARAM如果你有多個id其他鍵「」 splitOn

我的兩個班分別爲:

首先是即時通訊試圖將USERPROFILE填充

public class UserProfile 
{ 
    public Int64 UserId { get; set; } 

    public string UserName { get; set; } 

    public int Age { get; set; } 

    public int ProfileStatus { get; set; } 

    public Int64 AddressId { get; set; } 

    public int Country { get; set; } 

    public int State { get; set; } 

    public int City { get; set; } 

    public decimal Latitude { get; set; } 

    public decimal Longitude { get; set; } 
} 

,這是我的用戶地址類:

public class UserAddress 
{ 
    public Int64 Id { get; set; } 

    public Int64 UserId { get; set; } 

    public int Country { get; set; } 

    public int State { get; set; } 

    public int Town { get; set; } 

    public string PostCode { get; set; } 

    public decimal Latitude { get; set; } 

    public decimal Longitude { get; set; } 
} 

我不知道我在做什麼錯了,因爲我覺得我已經說的用戶ID拆分?但顯然這似乎並非如此?

**用別名

      SELECT u.Id as [UserId], u.Username as [Username], u.Age as [Age], 
            u.ProfileStatus as [ProfileStatus], 
            a.Id as [AddressId], a.Country as [Country], a.[State] as [State], 
            a.City as [City], a.Latitude as [Latitude], a.Longitude as [Longitude] 
          FROM [User].[User_Profile] u 
          INNER JOIN [User].[User_Address] a on u.id = a.UserId 
          WHERE u.Id = @UserId", (u, a) => 
          { 
           u.UserId = a.UserId; 
           return u; 
          }, 
          new { UserId = userId }, splitOn: "AddressId").FirstOrDefault(); 
+0

「SplitOn」不正確,因爲UserId是查詢中的第一列。您必須提供從第二個表中分隔第一個表/類的列。這似乎是'AddressId',不是嗎? –

+0

自從我和Dapper一起工作已經有一段時間了,但是不應該在「AddressId」上分裂嗎? – rikitikitik

回答

0

SplitOn更新**

更新SQL語句不正確,因爲UserId是在查詢的第一列。您必須提供從第二個表中劃分第一個表/類的列,因此第一個列/別名不屬於表User_Profile,但是User_Address

這似乎是AddressId

// ... 
new { UserId = userId }, splitOn: "AddressId").FirstOrDefault(); 
+0

感謝這似乎工作,現在的問題是它不返回地址的詳細信息,當我採取該查詢並在SQL中運行我得到正確的結果,你能看到什麼會導致isse? –

+0

這也不會返回userId,根據我的userprofile類運行後我唯一的值是年齡,ProfileStatus和用戶名 –

+0

@ScottAtkinson:我想原因是你的別名。他們必須具有與您的物業相同的名稱。這個問題有解決方法。 http://stackoverflow.com/a/9481901/284240 –