gpt4 book ai didi

c# - 使用 Dapper 和 Npgsql2 插入空值数组属性的问题

转载 作者:行者123 更新时间:2023-11-29 13:30:17 24 4
gpt4 key购买 nike

我目前正在调查使用 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[]

执行命令时发生的情况是,驱动程序提示参数 @Tags 在插入语句中被引用,但在命令的 Parameters 集合中不存在。 Dapper 根本无法发出它。这似乎只发生在数组类型的属性上。有什么建议吗?

最佳答案

这可能只是一个错误; postgres 对数组有特殊处理,这改变了 dapper 在几个地方的工作方式;看起来这些地方之一 (PackListParameters) 只考虑了非空场景。我移动了一些代码;如果你愿意 pulling the code from github并在本地尝试,我将不胜感激。希望它现在可以工作(注意:NuGet 尚未更新)。

关于c# - 使用 Dapper 和 Npgsql2 插入空值数组属性的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25403308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com