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个不同表的关系,那么将用户角色设置加载到用户对象中的正确语法是什么?
由于
哈迪
答案 0 :(得分:1)
您想要映射的是多对多的三向。
您无法直接定义它。您改为创建一个单独的实体UserRoleSetting并使用以下方法对其进行映射:用户,模块,角色中的one-to-manys和UserRoleSetting中的多对一。在FluentNHibernate中,它分别转换为HasMany()和References()。
如果不需要双向性,您可以省略每个连接映射的一侧。
这能解决您的问题吗?