Свободный NHibernate многие ко многим создают кластерный индекс по таблице ссылок - PullRequest
6 голосов
/ 05 августа 2010

У меня есть две сущности в отношениях многих ко многим.

 public class SecurityGroupMappingOverride : IAutoMappingOverride<SecurityGroup>
{
    public void Override(AutoMapping<SecurityGroup> mapping)
    {
        mapping.HasManyToMany(x => x.Actions).ParentKeyColumn("securityGroupId").ChildKeyColumn("actionId").
            LazyLoad().Table("ActionGroups");

        mapping.HasManyToMany(x => x.Members).ParentKeyColumn("securityGroupId").ChildKeyColumn("userId").
            LazyLoad().Inverse().Table("UserGroups");

        mapping.Map(x => x.Name).Length(64);

    }
}

Поэтому я хочу создать кластеризованный индекс для обоих столбцов (userId, securityGroupId) из таблицы UserGroups.

Или просто создать первичный ключ для групп пользователей в обоих столбцах, так как одновременно не может быть двух одинаковых ссылок.

Спасибо

Ответы [ 2 ]

3 голосов
/ 25 июля 2012

Полагаю, вы хотите, чтобы инструмент NHibernate SchemaExport генерировал эти индексы / ключи для вас.

Для многих ко многим сумок (FluentNHibernate'sтип коллекции по умолчанию), SchemaExport генерирует:

create UserGroups (
    securityGroupId INT not null,
    userId INT not null,
)

Для множества ко многим устанавливает , генерирует:

create UserGroups (
    securityGroupId INT not null,
    userId INT not null,
    primary key (securityGroupId, userId)
)

... так что просто добавьте .AsSet() к вашему отображению.

mapping.HasManyToMany(x => x.Members)
    .AsSet()
    // ... etc.

Это действительно имеет смысл, если вы подумаете о том, что такое сумки и наборы.Элементы набора должны быть уникальными, в то время как у сумок нет требования уникальности.

0 голосов
/ 11 мая 2011

Вам нужно IAutoMappingOverride<Member> вместо верхней части вашего кода.И вам нужен только один mapping.HasManyToMany.Если вы хотите двунаправленные отношения, вам нужно сделать противоположное отображение, сделав класс MemberMappingOverride, и там вы отметите обратное.

Надеюсь, это поможет.

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