C# 如何使用Fluent NHibernate和IUserType将两列映射到一个成员?
我有一个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
....
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>();