我正在迁移我的项目以使用最新的 Npgsql 库(v 8.0.2)。我使用此构造将 C# 类型映射到 Postgres 类型:
var nameTranslator = new NpgsqlSnakeCaseNameTranslator();;
NpgsqlConnection.GlobalTypeMapper.MapComposite<StockPriceDto>("stock_item_price", nameTranslator);
现在
NpgsqlConnection.GlobalTypeMapper
已被标记为过时,所以我想通过 Fluent NHibernate 配置找到它的替代方案。
在 postgres 中,我有一个 stock_item_price
类型,它几乎与 StockPriceDto
类型属性一对一映射(唯一的区别是命名约定)。
在数据库中我有类似的过程:
CREATE OR REPLACE PROCEDURE public.stock_price_save(list stock_item_price[]) ...
代码中调用的是:
command.CommandText = "Call stock_price_save(@list)";
var listParam = command.CreateParameter();
listParam.ParameterName = "list";
listParam.DbType = System.Data.DbType.Object;
listParam.Value = data; //IList<StockPriceDto>
command.Parameters.Add(listParam);
command.ExecuteNonQuery();
它与
NpgsqlConnection.GlobalTypeMapper
完美配合。我找不到在 Fluent NHibernate 中将类型 StockPriceDto
映射到 stock_item_price
的方法。有人做过吗?
错误是:对于没有参数的参数,不支持写入 'System.Collections.Generic.List`1[[X.StockPriceDto, X, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' 的值NpgsqlDbType 或 DataTypeName。尝试将这些值之一设置为预期的数据库类型..
正如废弃消息所述,GlobalTypeMapper 的替代品是使用 NpgsqlDataSource(请阅读 docs 了解更多详细信息)。 NHibernate 必须添加对 NpgsqlDataSource 的支持 - 在此之前您可以抑制废弃消息并继续使用 GlobalTypeMapper。