Dapper、Postgres 和 camelcase
Dapper, Postgres and camelcase
我正在尝试将 Dapper 与 Postgres 结合使用,但我一直无法使列映射正常工作。
我对数据库中的列使用 camel_casing。
这是我正在使用的table:
create table test_table
(
id uuid default gen_random_uuid() not null
constraint test_table_pk
primary key,
first_name varchar(256) not null,
created_date timestamp not null
);
alter table test_table owner to root;
我已提出以下申请来重现问题
namespace DapperIssue {
class Program {
static void Main(string[] args) {
NpgsqlConnection.GlobalTypeMapper.UseNodaTime();
DefaultTypeMap.MatchNamesWithUnderscores = true;
using (var conn =
new NpgsqlConnection("CONNECTIONSTRING FOR DATABASE")) {
conn.Open();
var result = conn.Query<T1>(@"
SELECT id, first_name FROM test_table", new { });
var result2 = conn.Query<T2>(@"
SELECT id, first_name, created_date FROM test_table", new { });
}
}
}
//public record T1(Guid Id, string FirstName) { }
public class T1 {
public Guid Id { get; }
public string FirstName { get; }
public T1(Guid id, string firstName) {
Id = id;
FirstName = firstName;
}
}
public record T2(Guid Id, string FirstName, Instant CreateDate) {
}
}
应用程序在尝试查询数据库时失败,出现以下错误:
System.InvalidOperationException:一个无参数的默认构造函数或一个匹配的签名(System.Guid id,System.String first_name)
我的理解是设置 DefaultTypeMap.MatchNamesWithUnderscores = true 应该可以完成这项工作。
使用 Dapper“2.0.78”和 NpgSql“5.0.3”
这似乎是 dapper 中的一个悬而未决的问题。阅读更多 DefaultTypeMap.MatchNamesWithUnderscores is ignored for ctor parameters and Added support for MatchNamesWithUnderscores and ctor parameters.
添加无参数构造函数应该可以解决您的问题。这些列应映射到具有命名设置的 class 的属性。
我正在尝试将 Dapper 与 Postgres 结合使用,但我一直无法使列映射正常工作。 我对数据库中的列使用 camel_casing。
这是我正在使用的table:
create table test_table
(
id uuid default gen_random_uuid() not null
constraint test_table_pk
primary key,
first_name varchar(256) not null,
created_date timestamp not null
);
alter table test_table owner to root;
我已提出以下申请来重现问题
namespace DapperIssue {
class Program {
static void Main(string[] args) {
NpgsqlConnection.GlobalTypeMapper.UseNodaTime();
DefaultTypeMap.MatchNamesWithUnderscores = true;
using (var conn =
new NpgsqlConnection("CONNECTIONSTRING FOR DATABASE")) {
conn.Open();
var result = conn.Query<T1>(@"
SELECT id, first_name FROM test_table", new { });
var result2 = conn.Query<T2>(@"
SELECT id, first_name, created_date FROM test_table", new { });
}
}
}
//public record T1(Guid Id, string FirstName) { }
public class T1 {
public Guid Id { get; }
public string FirstName { get; }
public T1(Guid id, string firstName) {
Id = id;
FirstName = firstName;
}
}
public record T2(Guid Id, string FirstName, Instant CreateDate) {
}
}
应用程序在尝试查询数据库时失败,出现以下错误:
System.InvalidOperationException:一个无参数的默认构造函数或一个匹配的签名(System.Guid id,System.String first_name)
我的理解是设置 DefaultTypeMap.MatchNamesWithUnderscores = true 应该可以完成这项工作。
使用 Dapper“2.0.78”和 NpgSql“5.0.3”
这似乎是 dapper 中的一个悬而未决的问题。阅读更多 DefaultTypeMap.MatchNamesWithUnderscores is ignored for ctor parameters and Added support for MatchNamesWithUnderscores and ctor parameters.
添加无参数构造函数应该可以解决您的问题。这些列应映射到具有命名设置的 class 的属性。