Fluent Nhibernate 和 npgsql 中的全局类型映射

问题描述 投票:0回答:1

我正在迁移我的项目以使用最新的 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。尝试将这些值之一设置为预期的数据库类型..

fluent-nhibernate npgsql
1个回答
0
投票

正如废弃消息所述,GlobalTypeMapper 的替代品是使用 NpgsqlDataSource(请阅读 docs 了解更多详细信息)。 NHibernate 必须添加对 NpgsqlDataSource 的支持 - 在此之前您可以抑制废弃消息并继续使用 GlobalTypeMapper。

© www.soinside.com 2019 - 2024. All rights reserved.