Dapper inserta en la mesa que tiene un PK compuesto

c# dapper dapper-extensions primary-key

Pregunta

Tengo una tabla que tiene una clave principal compuesta de dos columnas, ninguna de las cuales se autoincrementa, y mi inserción Dapper (parte de Dapper Extensions) está fallando en la inserción diciendo que la primera de las dos columnas no permite un valor nulo , incluso si el valor que estoy pasando no es nulo.

Student mesa:

StudentId (PK, not null)   \_ (combined to form primary key)
StudentName (PK, not null) /
Active                     -- just another column

DO#:

public class Student {
  public int StudentId { get; set; }
  public string StudentName { get; set; }
  public bool Active { get; set; }
}

var newStudent = new Student { StudentId = 5, StudentName = "Joe", Active = true };
var insertSuccess = myConn.Insert<Student>(newStudent);

Error:

No se puede insertar el valor NULL en la columna 'StudentId', tabla 'dbo.Student'; la columna no permite nulos. INSERT falla

Por alguna razón, Dapper no obtiene StudentId con un valor de 5. ¿Tengo que hacer algo especial para las tablas que tienen PK combinados, o con las tablas que tienen PK que no se autoincrementan? Gracias.

Respuesta popular

Agregar un AutoClassMapper cambiará el comportamiento de todas las clases. Si desea manejar solo esta clase, puede crear un Mapa solo para esta clase.

public class StudentClassMapper : ClassMapper<Student>
{
    public StudentClassMapper()
    {
        Map(x => x.StudentId).Key(KeyType.Assigned);
        Map(x => x.StudentName).Key(KeyType.Assigned);
        AutoMap();  // <-- Maps the unmapped columns
    }
} 


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué