Problem mit Spliton mit Dapper.net Inner Join

dapper sql

Frage

Ich habe die folgende SQL-Abfrage, die über dapper.net ausgeführt wird

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

Ich erhalte diesen Fehler beim Ausführen:

Wenn Sie die Multi-Mapping-APIs verwenden, stellen Sie sicher, dass Sie den splitOn-Parameter festlegen, wenn Sie andere Schlüssel als Id "," splitOn haben

Meine zwei Klassen sind wie folgt:

Das erste ist das userProfile, das ich zu füllen versuche

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

und das ist meine Benutzeradressklasse:

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

Ich bin mir nicht sicher, was ich falsch mache, da ich glaube, ich habe gesagt, dass ich mich auf der UserId aufteilen soll? aber das scheint eindeutig nicht der Fall zu sein?

** Aktualisierung **

Aktualisieren Sie die SQL-Anweisung mit Alias

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

Beliebte Antwort

Das SplitOn ist falsch, da UserId die erste Spalte in Ihrer Abfrage ist. Sie müssen die Spalte angeben, die die erste Tabelle / Klasse von der zweiten abgrenzt, also die erste Spalte / den ersten Alias, der nicht zur Tabelle User_Profile aber User_Address .

Das scheint AddressId .

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


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow