使用内部连接的拆分 dapper.net 问题



>我有以下sql查询,通过 dapper.net 执行

  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();

我在运行它时收到此错误:

使用多映射 API 时,请确保在具有 Id 以外的键时设置 splitOn 参数"、"splitOn

我的两个类如下:

首先是我试图填充的用户配置文件

 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; }
}

不确定我做错了什么,因为我想我已经说过要在 UserId 上拆分? 但显然情况并非如此?

**更新**

使用别名更新 sql 语句

                            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();

SplitOn不正确,因为UserId是查询中的第一列。您必须提供将第一个表/类与第二个表/类分隔开来的列,因此不属于表的第一列/别名User_ProfileUser_Address

这似乎很AddressId.

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

最新更新