Наша система генерирует электронные письма с выбранными пользователем списками контактов 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. Однако я хотел бы, чтобы у объекта домена электронной почты было 3 отдельных свойства IList для контактов каждого списка (To / CC / BCC), чтобы можно было включить следующий код:
testEmail.ToContacts.Add(contact1)
testEmail.CCContacts.Add(contact2)
testEmail.BCCContacts.Add(contact3)
Можно ли это сделать без добавления дополнительного объекта домена (EmailContact)? Нужно ли мне использовать два отношения «многие к одному» с дополнительным доменным объектом, как Билли Маккаферти упоминает здесь ?
Кроме того, как бы мне представить этот файл сопоставления NHibernate?