Mysql
 sql >> Database >  >> RDS >> Mysql

Valore di ritorno di Dapper MySQL

LAST_INSERT_ID si comporterà come hai descritto, ma hai un errore non correlato nella precedente istruzione di inserimento a causa della mancata inclusione di un punto e virgola alla fine di essa. Quando si diagnosticano errori di sintassi in MySQL, la stringa SQL contenuta nel messaggio di errore è generalmente immediatamente dopo l'errore di sintassi.

Prendi in considerazione la possibilità di riorganizzare le tue affermazioni per renderle leggibili, in modo da poter identificare più facilmente errori di sintassi come questo. Ad esempio:

public void Insert(TUser member)
{
    string sql = @"
        Insert into users
          (UserName, PasswordHash, SecurityStamp, Email, EmailConfirmed, PhoneNumber, PhoneNumberConfirmed, AccessFailedCount, LockoutEnabled, LockoutEndDateUtc, TwoFactorEnabled)
        values 
          (@name, @pwdHash, @SecStamp, @email, @emailconfirmed, @phonenumber, @phonenumberconfirmed, @accesscount, @lockoutenabled, @lockoutenddate, @twofactorenabled);

        select LAST_INSERT_ID();
    ";

    member.Id = db.Connection.ExecuteScalar<int>(sql, new
    {
      name = member.UserName,
      pwdHash = member.PasswordHash,
      SecStamp = member.SecurityStamp,
      email = member.Email,
      emailconfirmed = member.EmailConfirmed,
      phonenumber = member.PhoneNumber,
      phonenumberconfirmed = member.PhoneNumberConfirmed,
      accesscount = member.AccessFailedCount,
      lockoutenabled = member.LockoutEnabled,
      lockoutenddate = member.LockoutEndDateUtc,
      twofactorenabled = member.TwoFactorEnabled
    });
}

Per questa risposta , potresti anche essere in grado di rimuovere il cast su LAST_INSERT_ID se stai eseguendo una versione recente di MySQL.