Итак, у меня есть две таблицы, назовите их «Пользователь и элемент». Я хочу, чтобы каждый пользователь мог отмечать (например, «смотреть» вещи в юниверсе Google) на любой элемент.Хранение простого отношения без явного идентификатора
Теперь, исходя из теоретико-множественного подхода, разумно хранить это как простую связь между пользователями и элементами. Вызовите эту новую таблицу UserItemFlags. Таблица должна иметь две колонки; один с внешними ключами в таблице User, другой с внешними ключами в таблицу Item. Если пользовательский флажок U указывает на элемент I, это затем представляется наличием строки (U, I)
в таблице UserItemFlags.
Теперь моя проблема с выражением этого в Fluent-NHibernate заключается в следующем: я не могу понять, что делать с отображением Id
. В идеале у меня не было бы идентификатора, потому что нет ничего более, чем наличие или отсутствие этой связи между Пользователем и Элементом. Естественным следствием этой модели является невозможность дублирования строк в таблице. Это желаемая функция.
using FluentNHibernate.Mapping;
public class UserItemFlagsMapping : ClassMap<UserItemFlags>
{
public UserItemFlagsMapping()
{
// Aaaa! I must have an Id!
References(x => x.User).Not.Nullable();
References(x => x.Item).Not.Nullable();
}
}
Я был бы рад за любые указатели в правильном направлении, даже если они требуют от меня отказаться от Fluent для этого конкретного случая.
Да, я согласен Но Fluent-NHibernate не согласен. Мне нужно вызвать 'Id'-метод на ClassMap <...>' для Fluent, чтобы понять его. –
Метод Id() предназначен только для первичных ключей с одним столбцом. Вместо этого вы хотите использовать CompositeId(). Что-то вроде следующего: CompositeId(). KeyReference (x => x.User, "user_id"). KeyReference (x => x.Item, "item_id"; Очевидно, повторное использование сопоставления по умолчанию по умолчанию, вы не нужны имена столбцов. – Rich