dapper.net inner joinを使用したsplitonの問題

dapper sql

質問

私はdapper.net経由で実行される次のSQLクエリを持っています

  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を使用している場合、IDO、â€splitOn以外のキーがある場合はsplitOnパラメータを確実に設定します

私の2つのクラスは以下の通りです:

最初に移入しようとしている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; }
}

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

人気のある回答

UserIdがクエリの最初の列であるため、 SplitOnが正しくありません。第1のテーブル/クラスを第2のテーブル/クラスから区切るカラムを提供しなければならないので、テーブルUser_ProfileなくUser_Address属する最初のカラム/エイリアスをUser_ProfileUser_Addressます。

それはAddressIdです。

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


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ