1

当社のシステムは、ユーザーが選択した 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 マッピング ファイルで表すにはどうすればよいでしょうか。

4

1 に答える 1

0

あなたが引用した Billy McCafferty の記事によると、

一見すると、これは、ドメイン モデルに CustomerAddress オブジェクトを作成して、この関係テーブルを DB に反映させる必要があることを意味するかもしれません。NHibernate の場合はそうではありません。代わりに、この多対多の関係を管理するためのルックアップとして CustomerAddresses テーブルを使用する必要があることを示す多対多の関連付けを Customer.hbm.xml に追加するだけです。

McCafferty の「CustomerAddresses」の例を「EmailContacts」に置き換えます。この記事によると、電子メールと連絡先の間の多対多の関係を表すには「EmailContacts」テーブルEmailContactsが必要ですが、ドメイン オブジェクトは必要ありません。To、CC、および BCC の 3 つの個別の関係が必要な場合は、3 つの結合テーブルを作成します: To_EmailAddressesCC_EmailAddresses、およびBCC_EmailAddresses

私は NHibernate に詳しくないので、マッピング ファイルを更新する正確な方法はわかりませんが、記事には、E メール ドメイン オブジェクト (Email.hbm.xml) に関連するファイルを更新する必要があることが示されています。NHibernate のドキュメントには、マッピング ファイルで多対多の関係を表す方法が記載されています。

于 2008-11-21T19:29:44.360 に答える