c# - 如何在 Fluent NHibernate 中从数据库 char 数据类型中修剪字符串属性数据类型

标签 c# .net nhibernate orm fluent-nhibernate

我有一个 SQL 数据库和一个具有相同架构的 Oracle 数据库。

因此我想对这两个数据库使用我的模型类,我要做的就是更改 Fluent NHibernate 配置中的数据库连接字符串。

我有一些用于列的数据库 char 数据类型,但在我的模型类中,我将它们设置为字符串,但是当它们从查询返回时,它们填充了空格。

当我使用这些列查询数据库时,如何在不引起问题的情况下返回它们,因为它们需要匹配固定长度规范。

最佳答案

您可以创建 NHibernate.UserTypes.IUserType 的实现这将在从数据库中获取时修剪空白并在返回数据库时重新填充它。

在您的流畅映射中,您只需添加 .CustomType<T>其中 T是你的 IUserType实现。

This article有助于正确实现 IUserType .不要沉迷于 Assemble 这样的方法, Disassemble , DeepCopy , Replace - 看起来你甚至都不会打那些。您最关心的NullSafeGet ,您将在其中修剪,并且 NullSafeSet您将在其中重新填充。

更新

经过进一步考虑,我不确定您是否真的需要在插入数据库时​​重新填充值——数据库本身将强制列的固定长度。

针对您在评论中提供的链接,我认为该实现几乎可以帮助您实现目标,但我确实认为您可能需要对其进行一些修改。一方面,您可能不想同时删除前导和尾随空格,如 Trim()会做。另一方面,在您对 Equals 的覆盖中, 你会想要

     value

等于

value

关于c# - 如何在 Fluent NHibernate 中从数据库 char 数据类型中修剪字符串属性数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4651922/

相关文章:

c# - 使用不同的 Type 对象访问 object[]

c# - DataTable 到 Dictionary<String,StringBuilder> 的转换

c# - 使用 HBM 文件将字典映射到 NHibernate 中的子表

ASP.NET AJAX 进度条 : Update from Code Behind?

c# - NHibernate:具有通用枚举属性的映射类

C#:构造函数中的奇怪引用的行为类似于 "virtual field"

c# - 下载异步错误。在意外的时间调用了一个方法

c# - 规范化真的会影响高流量站点的性能吗?

c# - 如何在 C# 单元测试中向请求添加测试 cookie

.net - 未处理通过 MSMQ 的较大 WCF 消息