2016-11-19 10 views
3

У меня есть 2 таблицы в моей базе данных:Как я могу сопоставить эту связь 1: 1 с использованием свободного nhibernate, не требуя дополнительного кода принудительного применения на уровне приложения или отображения 1: много?

  • Таблица Team (Id, Name, WebsiteId (обнуляемым))
  • WebSite Таблица (Id, Name)

веб-сайт может быть выровнен с командой, но не обязательно. Команда может быть выровнена с веб-сайтом, но не обязательно. Таким образом, отношения между ними являются как одно, так и без них с обеих сторон.

Первоначально Единственный способ, которым я мог видеть, делать это, чтобы создать один ко многим картографирования, делая это:

WebsiteMap класс

HasMany(x => x.Teams).AsBag().Inverse().Fetch.Select().BatchSize(50); 

TeamMap класс

References(x => x.WebSite).Nullable(); 

но чтобы скорректировать применение сопоставления 1: 1, я должен сделать это в своем классе веб-сайта. У меня есть этот код:

public virtual Team Team 
    { 
     get 
     { 
      return Teams.FirstOrDefault(); 
     } 
    } 

Как я могу правильно описать эту взаимосвязь в самом слое отображения, чтобы избежать необходимости этого преобразования?

Главное, что одна из этих таблиц не является подчиненной другой. Все примеры, которые я вижу в Интернете, с 1: 1 сопоставлениями с плавным nhibernate, предполагают, что вторая таблица не будет существовать без первой (например, таблицы User и таблицы UserPreferences), но это не моя ситуация.

В моем примере выше, поскольку его значение с нулевым значением с обеих сторон не является ведущим или ведомым?
Каков правильный способ сопоставить это в свободном nhibernate?

+0

Это не только отображение один к одному с обеих сторон обнуляемого колонок для отношений? – starlight54

+0

да, но я не понимаю, как это отвечает на вопрос. – leora

+0

. Ответ на вопрос о том, как сделать «один-к-одному» с помощью Fluent здесь, я предполагаю, что просто добавление 'Nullable()' на обоих концах будет охватывать ваши сценарий. http://stackoverflow.com/questions/6085568/how-to-do-a-fluent-nhibernate-one-to-one-mapping#answers – starlight54

ответ

1

Это не специально для NHibernate, а решение, которое должно работать независимо, но вы можете создать третью таблицу, содержащую взаимосвязь между ними.

И WebSite Таблица и Таблица Команда будет затем иметь отношения один-к-ни с отношениями табл.

Тогда вы можете использовать такие отношения, как один mentioned in the comments с этим средним столом.

Итак: Team_WebSite (TeamID, WebSiteId)