Ich versuche, in eine Postgresql-Datenbank mit dapper und simplecrud einzufügen.
Meine Entität hat einen VARCHAR-Primärschlüssel, der meines Erachtens bedeutet, dass ich die Tags [Key] und [Required] in mein POCO aufnehmen muss.
[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)
}
Wenn ich die Funktion mit ausführe
_conn.Insert<Tube>(t);
Ich erhalte eine System.FormatException. Msgstr "Die Zeichenfolge hatte kein korrektes Format". Wenn ich mir die Stack-Trace anschaue, kann ich sehen, dass Dapper System.Convert.ToInt64 () aufruft.
Ich habe andere Entitäten mit automatisch inkrementierenden Primärschlüsseln, die problemlos funktionieren (daher weiß ich, dass die NpgSqlConnection einwandfrei funktioniert). Tatsächlich schlagen alle meine VARCHAR-PK-Entitäten fehl, während alle automatisch inkrementierenden PK-Entitäten erfolgreich sind.
Ich habe viele Eigenschaften, deshalb möchte ich die SQL nicht manuell ausschreiben, wenn ich es vermeiden kann.
Wie bekomme ich, dass SimpleCRUD richtig mit VARCHAR / String-Primärschlüsseln funktioniert? Ich dachte, die [Key] [Required] -Tags würden den Trick tun.
Versuchen Sie Dapper.Contrib mit [ExplicitKey]. Dies funktioniert sowohl mit String als auch mit dem Int-Schlüssel.
ExplicitKey: Geben Sie die Eigenschaft explizit als Schlüssel an, der nicht automatisch von der Datenbank generiert wird.