C# 如何使用Fluent NHibernate和IUserType将两列映射到一个成员?

C# 如何使用Fluent NHibernate和IUserType将两列映射到一个成员?,c#,fluent-nhibernate,composite,iusertype,C#,Fluent Nhibernate,Composite,Iusertype,我有一个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","S

我有一个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>();
Map(x=>x.Boz).Columns.Add(“GLUB”,“SHERP”).CustomType();

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

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

使用

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

   public class FooBarMap: ComponentMap<FooBar>
       {
           public FooBarMap()
           {
               Map(x => x.FoobarProp1);
               Map(x => x.FoobarProp2);
           }
       }
public类FooBarMap:ComponentMap
{
公共FooBarMap()
{
Map(x=>x.FoobarProp1);
Map(x=>x.FoobarProp2);
}
}
这将在原始表中创建2列(不为FooBar实体创建自己的表):FooBarProp1和FooBarProp2

ICompositeUserType的替代方案与我的fluent版本相比很糟糕:我总是收到错误消息“列数错误”和类似columns.Clear()的提示不起作用

问候,,
迈克尔

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

我能够通过以下方式使其工作:

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