2011-02-26 65 views
1
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個不同表的關係,那麼將用戶角色設置加載到用戶對象中的正確語法是什麼?FluentNHibernate hasManyToMany語法

感謝

哈迪

回答

1

什麼,你要地圖是一個三方多到很多。

你不能直接定義它。您可以創建一個單獨的實體UserRoleSetting並使用它來映射它:UserRoleSetting中的用戶,模塊,角色和多對一中的一對多。在FluentNHibernate中,它分別轉換爲HasMany()和References()。

如果不需要雙向性,您可以省略每個連接的映射的一側。

這是否解決您的問題?