Problème d'insertion d'une propriété de tableau de valeur nulle à l'aide de Dapper et Npgsql2

c# dapper npgsql postgresql sql

Question

J'étudie actuellement un problème lié à l'exécution d'une insertion à l'aide de Execute de Dapper's conjointement avec le fournisseur géré Npgsql2 pour PostgreSQL 9.3.

Structure de la table (simplifiée):

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

Entité associée (simplifiée):

[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; }
}

Code d'infraction

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();
    }
}

Le code ci-dessus utilise SqlMapperExtensions de Dapper.Contrib qui appelle Dapper.Execute avec les paramètres SQL et param suivants:

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[]

Que se passe-t-il lorsque la commande est exécutée? Le pilote se plaint de ce que le paramètre @Tags soit référencé dans l'instruction insert mais pas dans la collection Parameters de la commande. Dapper ne parvient tout simplement pas à l’émettre. Cela semble seulement se produire pour les propriétés de type tableau. Suggestions?

Réponse acceptée

Ceci est probablement simplement un bug; il existe une gestion spéciale des postgres pour les tableaux, ce qui modifie le fonctionnement de dapper dans quelques endroits; il semble que l'un de ces endroits ( PackListParameters ) ne considère que le scénario non nul. J'ai déplacé du code autour de moi; Si vous êtes ouvert à tirer le code de github et à l'essayer localement, je vous en serais très reconnaissant. J'espère que cela fonctionne maintenant (note: NuGet pas encore mis à jour).



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi