Синтаксис FluentNHibernate HasManyToMany - PullRequest
1 голос
/ 26 февраля 2011
CREATE TABLE [dbo].[User](
    [UserID] [int] IDENTITY(1,1) NOT NULL,
    [UserName] [varchar](50) NOT NULL,
    [Password] [varchar](50) NOT NULL,
 CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED 
(
    [UserID] ASC
) ON [PRIMARY]

CREATE TABLE [dbo].[Module](
    [ModuleID] [int] NOT NULL,
    [ModuleName] [nvarchar](50) NOT NULL,
 CONSTRAINT [PK_Module] PRIMARY KEY CLUSTERED 
(
    [ModuleID] ASC
) ON [PRIMARY]

CREATE TABLE [dbo].[Role](
    [RoleID] [int] NOT NULL,
    [RoleName] [nvarchar](50) NOT NULL,
 CONSTRAINT [PK_Role] PRIMARY KEY CLUSTERED 
(
    [RoleID] ASC
) ON [PRIMARY]

CREATE TABLE [dbo].[UserRoleSetting](
    [UserID] [int] NOT NULL, /* FK to User table */
    [ModuleID] [int] NOT NULL, /* FK to Module table */
    [RoleID] [int] NOT NULL, /* FK to Role table */
 CONSTRAINT [PK_UserRoleSetting] PRIMARY KEY CLUSTERED 
(
    [UserID] ASC,
    [ModuleID] ASC
) ON [PRIMARY]

GO

У меня есть такая схема, чтобы определить роли пользователей в разных модулях. Я знаю, что если таблица UserRoleSetting является простой таблицей отношений «многие ко многим», ее легко определить. Но эта таблица на самом деле содержит отношения из 3 разных таблиц, так какой может быть правильный синтаксис для загрузки настроек роли пользователя в пользовательский объект?

Спасибо

Hardy

1 Ответ

1 голос
/ 26 февраля 2011

То, что вы хотели бы нанести на карту, - это трехстороннее множество ко многим.

Вы не можете определить это напрямую. Вместо этого вы создаете отдельную сущность UserRoleSetting и сопоставляете ее, используя: один-к-одному в User, Module, Role и многие-к-одному в UserRoleSetting. В FluentNHibernate это переводится в HasMany () и References () соответственно.

Вы можете опустить одну сторону отображения каждого соединения, если двунаправленность не требуется.

Решает ли это вашу проблему?

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