Проблема со вставкой свойства массива нулевых значений с помощью Dapper и Npgsql2

1

В настоящее время я изучаю проблему с выполнением вставки с помощью Dapper Execute в сочетании с управляемым поставщиком Npgsql2 для PostgreSQL 9.3.

Структура таблицы (упрощенная):

CREATE TABLE posts
(
  id SERIAL NOT NULL PRIMARY KEY,
  title TEXT NULL,
  tags TEXT[] NULL,
  created timestamp NOT NULL,
);

Связанный объект (упрощенный):

[Table("posts")]
internal class Post
{
  public int Id { get; set; }
  public string Title { get; set; }
  public string[] Tags { get; set; }
  public DateTime Created { get; set; }
}

Оскорбительный код

using (var ts = CreateTransactionScope())
{
    using (var con = ConnectionFactory.GetConnection())
    {
        var post = new Post();
        post.Created = DateTime.UtcNow;
        post.Title = "Foo bar baz";
        con.Insert(post);

        ts.Complete();
    }
}

В приведенном выше коде используется Dapper.Contrib SqlMapperExtensions, который вызывает Dapper.Execute со следующими SQL и param:

SQL:

insert into posts (title, tags, created) values (@Title, @Tags, @Created)

Param:

Id  0  int
Created  {14.07.2010 19:15:51}  System.DateTime
Title  "Foo bar baz"  string
Tags  null  string[]

Что происходит при выполнении команды, так это то, что драйвер жалуется на параметр @Tags, который ссылается в инструкции insert, но не присутствует в команде Parameters collection. Dapper просто не может его испустить. Это похоже только на свойства типа массива. Предложения?

Теги:
dapper
npgsql

1 ответ

1
Лучший ответ

Вероятно, это просто ошибка; существует специальная обработка постгеров для массивов, которая меняет способ работы dapper в нескольких местах; похоже, что одно из этих мест (PackListParameters) учитывает только ненулевой сценарий. Я переместил какой-то код; если вы готовы вытащить код из github и попробовать его локально, я был бы очень благодарен. Надеюсь, теперь он работает (примечание: NuGet еще не обновлен).

  • 0
    Я только что запустил довольно большой пакетный импорт с последним изменчивым коммитом, и проблема, похоже, исчезла. Других проблем тоже нет.
  • 0
    @OliverWeichhold k, спасибо; это будет в следующей капле NuGet
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню