Ищите ответ о том, как настроить 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