Frage

I have an IUserType which maps two columns into a single type like this:

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

I'm having trouble specifying the two column names using Fluent NHibernate. I've tried this:

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

But the second column name is ignored. How can I specify the two column names using Fluent NHibernate?

Keine korrekte Lösung

Andere Tipps

Try ICompositeUserType. This can handle multiple columns. But sometimes colleagues forget about Component mapping which is often usable and much more simple to map:

Use

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

and create a ComponentMap mapping class like:

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

This will create 2 columns in your original table (does not create a own table for FooBar-entities): FooBarProp1 and FooBarProp2.

The alternative with ICompositeUserType sucks with my fluent version: I always get error messages "Wrong number of columns" and the hints like Columns.Clear() wont work.

Regards, Michael

I had the same issue in a project I was working on.

I was able to get it to work using the following:

Map(x => x.Boz).Columns.Add("GLUB").Columns.Add("SHERP").CustomType<FooBarUserType>();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top