Nhibernate 将数字(5,0)映射到字符串时保留前导零

Nhibernate 将数字(5,0)映射到字符串时保留前导零,nhibernate,fluent-nhibernate,nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,希望这是一个简单的问题。我在AS/400上有一个遗留的DB2数据库,其中邮政编码等字段存储为数字。在NHibernate中映射它们时,它们被视为整数,前导零丢失。通常我会使用 从表中选择数字(字段) 保留前导零,但我的理解是,如果我创建公式以更正格式,则会强制字段变为只读 将数字类型(及其前导数字)映射到字符串类型并再次映射的正确方法是什么?您试图在错误的级别处理它 前导零是一个显示问题;只需使用“00000”作为格式字符串。Diego是正确的,但是如果您确实需要在域中将邮政编码表示为字符串,您

希望这是一个简单的问题。我在AS/400上有一个遗留的DB2数据库,其中邮政编码等字段存储为数字。在NHibernate中映射它们时,它们被视为整数,前导零丢失。通常我会使用

从表中选择数字(字段)

保留前导零,但我的理解是,如果我创建公式以更正格式,则会强制字段变为只读


将数字类型(及其前导数字)映射到字符串类型并再次映射的正确方法是什么?

您试图在错误的级别处理它


前导零是一个显示问题;只需使用
“00000”
作为格式字符串。

Diego是正确的,但是如果您确实需要在域中将邮政编码表示为字符串,您可以实现自己的IUserType并在映射中使用它。但是,我不确定您是否能够处理将前导零放入数字数据库列的问题(如果您需要的话)。我认为,如果您在数据库中将邮政编码存储为'392',然后将其显示为'00392',这将非常简单


要快速了解创建IUserType所涉及的内容,请查看以下博文:

您不需要IUserType。仅仅是一个在
get
Convert.ToInt32(value)
中对
ToString(“00000”)
进行设置的属性就足够了,但这不需要将属性作为字符串映射到数据库(或定义两个属性)?我倾向于不同意这是一个显示问题。源系统自由地使用数字数据类型来表示数字字符串数据,而邮政编码只是无数这样做的例子中的一个。改变源系统以更适应该项目是不可能的;任何从事IT工作的人都理解这其中的政治和金钱原因。将数字字符串表示为它们所属的字符串是一个领域问题。您不会在100个视图中修复源系统数据转换问题100次,而是在域中修复一次。将其作为一个显示问题也是不切实际的,因为在视图级别,邮政编码等值是字母数字的,因为服务层包含加拿大和英国邮政编码。此外,web服务调用没有显示问题,也没有格式字符串。在显示层或服务层看到这样的翻译逻辑是一种代码味道。@tlum:你说得对。但问题是,您的数据库应该与您的域匹配,而事实并非如此。此外,在一个精心设计的应用程序中,ZipCodes的格式可以放在一个地方,而不是分散在所有视图中。