Ok Я нахожусь в ситуации, когда у меня есть следующие таблицыNHibernate дизайн и составные ключи
пользователя (UserId ....) UserFavourite (UserId, OtherUserId, AddDate)
Если вы «любимая «другой пользователь добавляет строку в userFavourite. Теперь у меня есть ссылочная целостность между столбцами UserId и OtherUserId и таблицей User с двумя ограничениями внешнего ключа.
Мой вопрос в том, что является наилучшей практикой для доступа к этому через NHibernate? Основной метод Get <> принимает идентификатор, который является столбцом идентификатора. В этом случае уникальной идентифицирующей характеристикой таблицы является составной ключ UserId и OtherUserId, поэтому это заставляет меня думать, что у меня должен быть составной ключ. Я читаю везде, что они плохие, хотя, и если БД спроектирована правильно, я не должен их использовать.
Так что я подумал о том, как еще я мог бы разработать базу данных, и я полагаю, я мог бы
UserFavourite (UniqueID, UserId, OtherUserId, AddDate)
И сделать UniqueID рк и ID для Get метод и помещает уникальное ограничение в столбцы UserId/OtherUserId. Однако это не решает мою проблему, так как когда я хочу удалить строку через код или получить ее, мне все равно нужно передать UniqueID, к которому у меня не будет доступа. Я хочу быть в состоянии сказать
«Удалить этого пользователя (идентификатор пользователя 142) из избранных». Поэтому у меня есть только доступ к UserId и вашему собственному UserId, поэтому мне как-то нужно иметь возможность запускать NHibernate-запрос, используя эти два идентификатора, а не уникальный идентификатор.
Может ли кто-нибудь указать мне, как этот случай следует обрабатывать в NHibernate с помощью идеальных практик, чтобы я мог легко и эффективно выполнять эти запросы без использования составных клавиш?
Я немного запутался в двух сопоставлениях «один ко многим» в пользовательском классе, сможете ли вы опубликовать пример сопоставления с этим? Я не уверен, как вы объявляете свойство UserId и имеете два отдельных сопоставления в файле для этого же свойства. Также, когда вы говорите, я, вероятно, никогда не буду использовать UniqueId для удаления, как я могу удалить в противном случае? Я думал, что единственный способ удалить с помощью объекта сеанса был с идентификатором? – NZJames