Как использовать соглашение IHasManyConvention Fluent NHibernate, чтобы установить PropertyRef для сопоставления HasMany? - PullRequest
4 голосов
/ 26 февраля 2010

В настоящее время я использую Fluent NHibernate для генерации схемы базы данных, но я хочу, чтобы сущности в отношении HasMany указывали на другой столбец для ссылки. IE, вот что NHibernate сгенерирует при создании DDL:

alter table `Pony` add index (Stable_ID),
add constraint Ponies_Stable foreign key (Stable_Id)
references `Stable` (Id);

Вот что я хочу получить:

alter table `Pony` add index (Stable_ID),
add constraint Ponies_Stable foreign key (Stable_Id)
references `Stable` (EntityId);

Где Stable.ID будет первичным ключом, а Stable.EntityId - просто еще один столбец, который я установил.

У меня уже есть класс, который выглядит так:

public class ForeignKeyReferenceConvention : IHasManyConvention
{
    public void Apply(IOneToManyCollectionInstance instance)
    {
        instance.Cascade.All();
        //What goes here so that I can change the reference column?
    }
}

Что мне нужно сделать, чтобы изменить ссылочный столбец?

В качестве примера, вот как выглядит код для IReferenceConvention для того же:

    public class MyReferenceConvention : IReferenceConvention
    {
        public void Apply(IManyToOneInstance instance)
        {
            instance.PropertyRef("EntityId");
            instance.Cascade.All();
        }
    }

EDIT: instance.Key.Column("EntityId") не является решением.

1 Ответ

7 голосов
/ 10 марта 2010

Примечание: доступно только в сборках после # 632 из Свободных загрузок NHibernate

В IOneToManyInstance есть свойство, которое называется Key, которое позволяет вам изменить ключ, используемый в отношении; в этом свойстве есть метод PropertyRef, который должен быть тем, что вы ищете.

public class ForeignKeyReferenceConvention : IHasManyConvention
{
  public void Apply(IOneToManyCollectionInstance instance)
  {
    instance.Key.PropertyRef("EntityId");
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...