Npgsql.PostgresException 42703:关系"posts"的列"Created"不存在



目前我正在用.NET Core和PostgreSQL做一个小项目。对于我的数据访问,我想使用Dapper.Contrib。现在,我面临以下问题:

以下片段显示了CREATE_DATABASE.sql

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE TABLE posts (
id UUID DEFAULT uuid_generate_v4 (),
created BIGINT,
value VARCHAR NOT NULL,
PRIMARY KEY (Id)
);

下面是我在.NET Core 中的模型类

[Table("posts")]
public class Post
{
[Column("id")]
public Guid Id { get; set; }
[Column("created")]
public long Created { get; set; }
[Column("value")]
public string Value { get; set; }
}

insert方法如下(它在基类中。在这种情况下,T是Post的类型(:

public void Insert(T entity)
{
_connection.Insert(entity);
}

当尝试插入Post对象时,我遇到了以下错误:

Ein Ausnahmefehler des Typs "Npgsql.PostgresException" ist in System.Private.CoreLib.dll aufgetreten.: '42703: column "Created" of relation "posts" does not exist

当将NpgsqlLogManager.Provider设置为new ConsoleLoggingProvider(NpgsqlLogLevel.Trace, true, true);时,会记录以下INSERT语句:

DEBUG [14313] Executing statement(s):
insert into posts ("Created", "Value") values ($1, $2) RETURNING Id

那么,问题出在哪里呢?我认为Dapper.Contrib在属性方面做得很好,但显然不是。

除了将模型属性重命名为小写之外,有人知道如何解决这个问题吗?

到目前为止谢谢你。

使用Dapper.Contrib,可以映射表名,但显然无法映射列名。此功能计划用于2.x版本。2.x版本发布;但这个问题仍然悬而未决。查看发布说明,该功能尚未添加。

请参考这个答案来了解Dapper的其他查询生成器,这些查询生成器支持列名映射。

Dapper.Contrib似乎不允许指定Column属性(但允许指定Table属性(。这个案子的票是开着的。但它确实支持自定义列到属性的映射程序。

有关如何实现此映射的更多详细信息,请参阅本文。

最新更新