当社のシステムは、ユーザーが選択した 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])
)
私には、これは Email オブジェクトと Contact オブジェクトの間の多対多の関係の場合のように見えます。ただし、次のコードを有効にできるように、メール ドメイン オブジェクトに各リスト (To / CC / BCC) の連絡先に対して 3 つの個別の IList プロパティを持たせたいと考えています。
testEmail.ToContacts.Add(contact1)
testEmail.CCContacts.Add(contact2)
testEmail.BCCContacts.Add(contact3)
これは、追加のドメイン オブジェクト (EmailContact) を追加せずに実行できますか? Billy McCafferty がここで述べているように、追加のドメイン オブジェクトで 2 つの多対 1 の関係を使用する必要がありますか?
また、これを NHibernate マッピング ファイルで表すにはどうすればよいでしょうか。