2017-06-06 2 views
2

Si le BO est marqué comme ayant une clé avec [key], pourquoi dapper une erreur?Dapper exception - Get <T> prend uniquement en charge une entité avec une propriété [Key], mais [key] est définie

[Table("tblWebReadyToWorkQualifications")] 
public class TeacherQualificationBO 
{ 
    [Key] 
    public int TeacherID { get; set; } 

    public string ReadyToWorkGuid { get; set; } 

    public int QualificationID { get; set; } 

} 

Appel à Dapper qui lève l'exception

 public IEnumerable<TeacherQualificationBO> GetTeacherQualifications(int TeacherID) 
     { 
     using (var connection = GetOpenConnection()) 
     { 
      return connection.Get<IEnumerable<TeacherQualificationBO>>(TeacherID); 
     } 
     } 

La table tblWebReadyToWorkQualifications a une clé primaire sur TeacherID.

Erreur: à Dapper.Contrib.Extensions.SqlMapperExtensions.Get [T] (connexion IDbConnection, Object ID, IDbTransaction transaction, Nullable`1 CommandTimeout) à d: \ egna Projekt \ dapper-dot-net \ Dapper. Contrib \ SqlMapperExtensions.cs: ligne 128

+1

Quelle est l'erreur générée? trace de la pile? – Tewr

+1

Il est à noter que 'Get()' est destiné à obtenir un seul enregistrement, pas une collection. 'IEnumerable ' n'est pas considéré comme valide. Vous devrez probablement écrire votre propre requête pour cela. – willaien

Répondre

1

Le message d'erreur essaie probablement de vous dire que le type générique IEnumerable<TeacherQualificationBO> n'a pas d'attribut [Key], ce qui est vrai. Seul le type TeacherQualificationBO fait.

changement

return connection.Get<IEnumerable<TeacherQualificationBO>>(TeacherID); 

à

return connection.Get<TeacherQualificationBO>(TeacherID); 

Vous devez également modifier le type de retour de votre fonction TeacherQualificationBO pour refléter cela. Vous déclarez que TeacherID est une clé primaire (donc unique), donc TeacherID ne correspondra plus qu'à un seul enregistrement. Ainsi, il est logique de ne pas retourner une collection.