Составное поле для составления карт Fluent Nhibernate 3 (пользовательский тип) - PullRequest
1 голос
/ 31 мая 2011

Привет всем, мой сценарий

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");

    }
}

Где Функция И Профиль - это два легко отображаемых объекта. Когда я бегу, у меня появляется эта ошибка:

Не удалось определить тип для: Data.Model.Entities.Function, Data.Model, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null, для столбцов: NHibernate.Mapping.Column (FunctionID) "}

Есть ли способ избежать этого? в конечном счете мне нужно создать класс с CompositeID, созданный двумя настраиваемыми сопоставленными классами. Если я использую композитный идентификатор с полями int, он работает как шарм

Заранее спасибо

Отображение функции (как профиля)

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);
    }
}

1 Ответ

6 голосов
/ 31 мая 2011

Использовать KeyReference вместо KeyProperty

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

    }
}
...