我们的系统生成由用户选择的 To / CC / BCC 联系人列表的电子邮件。我希望将它们存储在我们的 SQL Server 数据库中,以下是简化的数据库表结构:
CREATE TABLE [Contact] (
[ContactID] [int] IDENTITY (1, 1) NOT NULL,
[Name] [varchar] (100) NOT NULL,
[EmailAddress] [varchar] (100) NOT NULL,
CONSTRAINT [PK_Contact] PRIMARY KEY CLUSTERED ([ContactID])
)
CREATE TABLE [Email] (
[EmailID] [int] IDENTITY (1, 1) NOT NULL,
[Subject] [varchar] (500) NOT NULL,
[Message] [text] NULL,
[DateSent] [datetime] NOT NULL,
CONSTRAINT [PK_Email] PRIMARY KEY CLUSTERED ([EmailID])
)
CREATE TABLE [EmailContact] (
[EmailID] [int] NOT NULL,
[ContactID] [int] NOT NULL,
[Type] [varchar] (4) NOT NULL,
CONSTRAINT [PK_EmailContactList] PRIMARY KEY CLUSTERED
(
[EmailID],
[ContactID],
[Type]
),
CONSTRAINT [FK_EmailContact_Contact] FOREIGN KEY ([ContactID]) REFERENCES [Contact] ([ContactID]),
CONSTRAINT [FK_EmailContact_Email] FOREIGN KEY ([EmailID]) REFERENCES [Email] ([EmailID])
)
对我来说,这看起来像是电子邮件和联系人对象之间多对多关系的案例。然而,我希望电子邮件域对象拥有3个单独的IList属性,分别为每个列表的联系人(收件人/抄送人/密送人),以便我能够使用以下代码:
testEmail.ToContacts.Add(contact1)
testEmail.CCContacts.Add(contact2)
testEmail.BCCContacts.Add(contact3)
这能在不添加其他域对象(EmailContact)的情况下完成吗?我需要像Billy McCafferty在这里提到的那样使用两个多对一关系以及另一个域对象吗?
另外,我应该如何在NHibernate映射文件中表示这个问题?