Dapper insérer dans la table qui a un PK composite

c# dapper dapper-extensions primary-key

Question

J'ai une table qui a une clé primaire composée de deux colonnes, dont aucune n'est auto-incrémentée, et mon insertion Dapper (qui fait partie de Dapper Extensions) échoue sur l'insertion en disant que la première des deux colonnes ne permet pas une null même si la valeur que je passe n'est pas nulle.

Student table:

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

C #:

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

Erreur:

Impossible d'insérer la valeur NULL dans la colonne 'StudentId', table 'dbo.Student'; colonne n'autorise pas les valeurs NULL. INSERT échoue.

Dapper n'obtient pas le StudentId avec une valeur de 5. Dois-je faire quelque chose de spécial pour les tables qui ont combiné des PK, ou avec des tables avec PK qui ne sont pas auto-incrémentées? Merci.

Réponse populaire

L'ajout d'un AutoClassMapper changera le comportement de toutes les classes. Si vous souhaitez gérer uniquement cette classe, vous pouvez créer une carte pour cette classe uniquement.

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


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi