Свободное отображение объективизированных отношений NHibernate - PullRequest
1 голос
/ 10 марта 2009

Ищите ответ о том, как настроить NHibernate для поддержки моего сценария, карты «многие ко многим» с объективированным отношением.

У меня есть набор Person: s с отношениями к другому Person: s. Каждое из отношений имеет атрибут, определяющий, какой тип отношения они имеют. В RDB это делается с помощью таблицы «многие ко многим» с типом отношения, указанным в этой таблице, модель может быть расширена путем предоставления большего количества типов, например, "близкий друг" и "заклятый враг".

Я бы хотел иметь возможность запросить объект Person для возврата всех связанных лиц по типу

<IList>Person myEnemies =  myPerson.getRelatedPersons(relationType.Enemy)

или

<IList>Person myFriends = myPerson.getRelatedPersons(relationType.Friend)

Другим (менее расширяемым) решением было бы статически определить в классе, какие существуют другие отношения:

public class Person   
{   
  public virtual int Id { get; private set; }   
  public virtual string FirstName { get; set; }   
  public virtual string LastName { get; set; }   
  public virtual IList<Person> Friends { get; set; }   
  public virtual IList<Person> Enemies { get; set; }   
}

Сейчас мне приходится использовать устаревшую базу данных с таблицей Person и таблицей PersonPerson. Таблица PersonPerson содержит тип отношения как целое число.

Я пытался сделать это, используя синтаксис, как показано ниже, но безуспешно ...

// How to specify type=1  here?
HasManyToMany(x => x.Friends).WithTableName("Person_Person"); 

// How to specify type=2  here?
HasManyToMany(x => x.Enemies).WithTableName("Person_Person"); 

Какие-либо советы / решение по отображению этого с (свободно) NHibernate?

BR

/ Jens

1 Ответ

1 голос
/ 11 марта 2009

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

Во втором примере вы просто сможете использовать предложение Where.

HasManyToMany(x => x.Friends)
  .WithTableName("Person_Person")
  .Where("type = 2");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...