FluentNHibernate HasManyToMany语法

时间:2010-08-21 02:19:02

标签: fluent-nhibernate

我在找出与FluentNHibernate映射多对多关系的正确语法时遇到了一些麻烦。我已经在SO和其他地方查看了其他几个问题,但是没有看到任何相关的内容,特别是相同的表格结构。希望有人比我对FNH了解得多,可以帮助我解决这个问题。这是我的表结构:

CREATE TABLE [dbo].[WorkItems](
    [Id] [bigint] IDENTITY(1,1) NOT NULL,
    [CategoryId] [bigint] NOT NULL,
    [DateTime] [datetime] NOT NULL,
    [Details] [nvarchar](2000) NULL,
    [Duration] [int] NOT NULL,
    [DurationInterval] [nvarchar](10) NOT NULL,
    [Summary] [nvarchar](150) NOT NULL,
    [UserId] [bigint] NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)

CREATE TABLE [dbo].[Tags](
    [Id] [bigint] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](50) NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)

CREATE TABLE [dbo].[TagWorkItems](
    [TagId] [bigint] NOT NULL,
    [WorkItemId] [bigint] NOT NULL,
 CONSTRAINT [TagId_WorkItemId_PK] PRIMARY KEY CLUSTERED 
(
    [TagId] ASC,
    [WorkItemId] ASC
)

TagWorkItems表中的TagId和WorkItemId都是返回父表的外键。这是一个非常简单的连接表设置,用于m2m关系。我的Tag类有一个ICollection类型的属性,我的WorkItem类有一个ICollection属性。我似乎无法弄清楚如何为这些属性设置映射。任何建议将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

这是一个WorkItem映射可能会说的例子; readonly位取决于你将如何维持这种关系:

HasManyToMany(x => x.Tags)
            .Table("TagWorkItems")
            .ParentKeyColumn("WorkItemId")
            .ChildKeyColumn("TagId")
            .AsSet()
            .ReadOnly();