1

我有一个 IUserType ,它将两列映射为一个类型,如下所示:

....
public object NullSafeGet(IDataReader rs, string[] names, object owner)
{
    return new FooBar(rs[names[0]], rs[names[1]]);
}
....

我无法使用 Fluent NHibernate 指定两个列名。我试过这个:

Map(x => x.Boz).Columns.Add("GLUB","SHERP").CustomType<FooBarUserType>();

但第二列名称被忽略。如何使用 Fluent NHibernate 指定两个列名?

4

2 回答 2

1

我在一个项目中遇到了同样的问题。

我能够使用以下方法使其工作:

Map(x => x.Boz).Columns.Add("GLUB").Columns.Add("SHERP").CustomType<FooBarUserType>();
于 2013-10-07T19:43:14.587 回答
1

尝试 ICompositeUserType。这可以处理多个列。但有时同事会忘记组件映射,它通常可用且映射更简单:

利用

   Component(x=>x.Boz) //instead of Map(x=>x.Boz)

并创建一个 ComponentMap 映射类,如:

   public class FooBarMap: ComponentMap<FooBar>
       {
           public FooBarMap()
           {
               Map(x => x.FoobarProp1);
               Map(x => x.FoobarProp2);
           }
       }

这将在您的原始表中创建 2 列(不会为 FooBar 实体创建自己的表):FooBarProp1 和 FooBarProp2。

ICompositeUserType 的替代方案在我的流利版本中很糟糕:我总是收到错误消息“列数错误”,并且像 Columns.Clear() 这样的提示不起作用。

问候,迈克尔

于 2012-09-11T19:35:37.317 回答