Search code examples
fluent-nhibernatecomposite-idcustom-type

Fluent Nhibernate 3 Mapping Composite Field (Custom Type)


HI all, my scenario

public class Permission
{
    public virtual Function Function { get; set; }
    public virtual Profile Profile { get; set; }
}

public class MapPermission : ClassMap<Permission>
{
    public MapPermission()
    {
        Table("Permissions".ToUpper());
        CompositeId().KeyProperty(x => x.Function, "FunctionID").KeyProperty(x => x.Profile, "ProfileID");

    }
}

Where Function AND Profile are two easy mapped entities. When i Run i have this error:

Could not determine type for: Data.Model.Entities.Function, Data.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null, for columns: NHibernate.Mapping.Column(FunctionID)"}

Is there a way to avoid this? ultimately i need to create a class with CompositeID made by two custom mapped classes. If i uses compositeID with int fields it works like a charm

Thanks in Advance

Function (Like Profile) Mapping

public class Function
{
    public virtual int ID { get; set; }
    public virtual string Name { get; set; }
}

public class MapFunction : ClassMap<Function>
{
    public MapFunction()
    {
        Table("FUNCTIONS");
        Id(x => x.ID);
        Map(x => x.Name);
    }
}

Solution

  • Use KeyReference instead of KeyProperty

    public class MapPermission : ClassMap<Permission>
    {
        public MapPermission()
        {
            Table("Permissions".ToUpper());
            CompositeId()
                .KeyReference(x => x.Function, "FunctionID")
                .KeyReference(x => x.Profile, "ProfileID");
    
        }
    }