我在找出与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属性。我似乎无法弄清楚如何为这些属性设置映射。任何建议将不胜感激。感谢。
答案 0 :(得分:0)
这是一个WorkItem映射可能会说的例子; readonly位取决于你将如何维持这种关系:
HasManyToMany(x => x.Tags)
.Table("TagWorkItems")
.ParentKeyColumn("WorkItemId")
.ChildKeyColumn("TagId")
.AsSet()
.ReadOnly();