【发布时间】:2015-01-06 19:02:18
【问题描述】:
在我的课堂上,我实现了隐式运算符和 IConvertible 接口。当使用 NHibernate 类时(这不是问题),我得到“mytype”类型的对象无法转换为“字符串”。当我查看堆栈跟踪时,显示 System.RuntimeType.TryChangeType 方法中发生错误。如果我反编译代码,它会进一步调用 Binder.ChangeType,所以看起来它不使用 IConvertible 接口。 Binder 是存在于 System.Reflection 命名空间中的抽象类。我如何向系统提供知识,以便能够将我的类型自动转换为字符串。我想将一个具有多个 int 属性的值(组件)对象投影到一个字符串中,并且我不想做额外的步骤。
我们有一个组件 PolicyNumber 映射为
Component(x => x.PolicyNumber, m =>
{
m.Map(x => x.Year, "Year");
m.Map(x => x.ClientNumber, "ClientNumber");
m.Map(x => x.OptionNumber, "BidOptionNumber");
}).ReadOnly();
在 QueryOver 中,我想将其投影到格式为 year-clientNumber-bidOptionNumber 的字符串中。这只是一个例子,我们有更多的值对象来代替魔术字符串。
.Select(Projections.Group<ClientPolicy>(x => clientPolicy.PolicyNumber))
.WithAlias(() => dto.ClientPolicyNumber)
如果将 dto 上的 PolicyNumber 定义为字符串类型,那么我希望 ToString() 发生。我通过在对象上提供一个 Value 属性来解决这个问题,但如果发生这种自动转换会很好。根据调用堆栈跟踪,这似乎是不可能的。我也不想为每个值对象创建 IUserType 实现,因为有很多。
【问题讨论】:
-
你能给出一个代码示例来说明你正在尝试做什么吗?我的第一反应 - 因为这与 NHibernate 相关 - 是查看
IUserType接口,以便您可以定义列与自定义类型之间的自定义映射并再次返回。 -
@Anthony:添加了关于我想要实现的目标的映射和更多信息。
标签: c# nhibernate