我目前正在调查使用Dapper的Execute和PostgreSQL 9.3的Npgsql2托管提供程序执行插入时的问题。
表结构(简化):
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,它使用以下SQL和参数调用Dapper.Execute:
SQL:
insert into posts (title, tags, created) values (@Title, @Tags, @Created)
参数:
Id 0 int
Created {14.07.2010 19:15:51} System.DateTime
Title "Foo bar baz" string
Tags null string[]
执行命令时发生的情况是驱动程序抱怨参数
@标签
在insert语句中引用,但在命令的
参数
收集Dapper根本无法发出它。这似乎只发生在数组类型财产上。建议?