Вставка Dapper / SimpleCRUD с первичным ключом VARCHAR, генерирующая исключение FormatException - "Строка была в неправильном формате" - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь вставить в базу данных postgresql, используя dapper и simplecrud.

У моего объекта есть первичный ключ VARCHAR, который, как я понимаю, означает, что я должен включить теги [Key] и [Required] вмой 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)
}

Когда я выполняю функцию, используя

    _conn.Insert<Tube>(t);

, я получаю System.FormatException.Msgstr "Строка была не в правильном формате".Глядя на трассировку стека, я вижу, что Даппер вызывает System.Convert.ToInt64 ()

У меня есть другие объекты с автоматически увеличивающимися первичными ключами, которые работают без проблем (поэтому я знаю, что NpgSqlConnection работаетотлично).Фактически, все мои сущности VARCHAR PK терпят неудачу, в то время как все мои автоинкрементные сущности PK успешно выполняются.

У меня много свойств, поэтому я не хочу выписывать SQL вручную, если смогуизбегайте этого.

Как заставить SimpleCRUD правильно работать с первичными ключами VARCHAR / string?Я думал, что теги [Key] [Required] помогут.

1 Ответ

0 голосов
/ 01 декабря 2018

Попробуйте Dapper.Contrib с помощью [ExplicitKey].Это работает как со строкой, так и с ключом int.

ExplicitKey: укажите свойство как ключ, который не генерируется автоматически базой данных.

...