J'essaie d'insérer dans une base de données postgresql en utilisant dapper et simplecrud.
Mon entité a une clé primaire VARCHAR, ce qui signifie que je dois inclure les balises [Key] et [Required] dans mon POCO.
[Table("tube_data")]
class Tube : IEntity
{
//my primary key (name matches column name)
[Dapper.Key] [Dapper.Required]
public string tube_nr { get; }
//Constructors (probably not important)
private Tube()
{
}
public Tube(string tube_nr)
{
this.tube_nr = tube_nr;
}
//more code... just nullable properties (ints, floats and strings)
}
Quand j'exécute la fonction en utilisant
_conn.Insert<Tube>(t);
Je reçois une exception System.FormatException. "La chaîne n'était pas au format correct". En regardant la trace de la pile, je peux voir que Dapper appelle System.Convert.ToInt64 ()
J'ai d'autres entités avec des clés primaires auto-incrémentées, qui fonctionnent sans problème (donc je sais que NpgSqlConnection fonctionne correctement). En fait, toutes mes entités PK VARCHAR échouent, alors que toutes mes entités PK auto-incrémentées réussissent.
J'ai beaucoup de propriétés, donc je ne veux pas écrire le SQL manuellement si je peux l'éviter.
Comment faire fonctionner correctement SimpleCRUD avec les clés primaires VARCHAR / string? Je pensais que les balises [Key] [Required] feraient l'affaire.
Essayez Dapper.Contrib avec [ExplicitKey]. Cela fonctionne avec string et int key.
ExplicitKey: spécifiez la propriété comme une clé explicitement non générée automatiquement par la base de données.