Словарь сопоставления с ключом на основе сущности с использованием Fluent Nhibernate - PullRequest
0 голосов
/ 12 марта 2012

У меня есть следующий NHibernate HBM, который работает, как и ожидалось, но он делает мой код ломким, так как классы могут измениться, и я хочу сделать отображение в FNH, но, как я ни стараюсь, я не могу заставить его работать,особенно то, как вы получаете индекс «многие ко многим»:

<map name="Permissions" table="PermissionsBySet" cascade="all">
  <key column="PermissionSet_id" />
  <index-many-to-many class="Picomole.ReadModel.Permission, Picomole.ReadModel" column="PermissionId" />
  <element column="PermissionType" type="Picomole.ReadModel.PermissionType, Picomole.ReadModel" not-null="true" />
</map>

Учитывая следующие классы:

public class PermissionSet : DomainObject
{
    public virtual PermissionSet Defaults { get; set; }

    public virtual IDictionary<Permission, PermissionType> Permissions { get; set; }
}

public class Permission : DomainObject
{
    public virtual string Controller { get; set; }

    public virtual string Action { get; set; }
}

public enum PermissionType
{
    None,
    Read,
    Write,
    Grant
}

Ответы [ 2 ]

2 голосов
/ 13 марта 2012
public class PermissionSetMap : ClassMap<PermissionSet>
{
    public PermissionSetMap()
    {
        HasManyToMany(ps => ps.Permissions)
            .AsEntityMap("permissions_id")
            .Element("PermissionType");
    }
}
1 голос
/ 04 апреля 2012

Спасибо Firo за указание мне в правильном направлении.Окончательный ответ на то, что я пытался сделать, был:

HasManyToMany(x => x.Permissions)
                .AsEntityMap("PermissionId", "PermissionLevel")
                .Element("PermissionLevel", x => x.Type<PermissionLevel>())
                .Table("PermissionsBySet");

И из-за некоторых проблем со странной ошибкой, связанной с закрытием сеансового соединения, я должен был добавить:

                .Fetch.Join()
                .Not.LazyLoad()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...