NHibernate отображение многих ко многим с определенным порядком - PullRequest
0 голосов
/ 10 августа 2011

У меня есть таблица Users и таблица Profiles.Один пользователь может иметь много профилей, а профиль может иметь много пользователей.Дополнительным требованием является то, что профили пользователя должны сохранять свой указанный порядок при сохранении в базе данных.Поэтому у меня есть следующие отношения:

tables

Как правильно сопоставить это с классами с NHibernate?Является ли единственный способ создать другой класс, например UserProfile, который имеет свойство Order и ссылается на User и Profile?Есть ли более изящная техника для этого?Я бы хотел этого избежать, так как это добавило бы еще один слой абстракции, который не обязательно нужен.

Спасибо за любые предложения.

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Я действительно нашел правильный способ решения этой проблемы.

Для отображений FluentMappings следует использовать AsMap(indexColumnName) или <map name="Profiles"><index column="Order" type="integer" /></map>.

// Inside the UserMapping (or an AutoMappingOverride).
this.ManyToMany(u => u.Profiles).AsMap("`Order`"); // "Order" is the column we want!

// Which produces this SQL - SQLite in my case:
create table ProfileToUser (
    User_id INT not null,
    Profile_id INT not null,
    "Order" INT not null,           // Exactly what I wanted.
    primary key (User_id, Order))
1 голос
/ 10 августа 2011

Я видел, как этот вопрос задавали несколько раз, и я не думаю, что видел отличное решение без создания UserProfile сущности.

Oneчто вы можете сделать, это ссылаться на эту сущность только из класса Users или Profiles.Вы можете сделать что-то вроде этого, например, при добавлении новых профилей для пользователя:

public virtual AddProfile(Profile profileToAdd, int order)
{
    //Create middle man object
    UserProfile newUserProfile = new UserProfile(this.Id, profileToAdd, order);
    this.UserProfiles.Add(newUserProfile);
}

Это может быть не идеально в вашем случае, но если вы хотите абстрагировать middle man от такогоЯ думаю, что приведенный выше пример дает вам начало.

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