1

Customer、Device、LocationTag の 3 つのエンティティがあります。

顧客は LocationTags のリストを持っています (ID と説明のみ)。また、デバイスのリストもあります。

デバイスには顧客の LocationTags のサブセットがタグ付けされているため、デバイスにも LocationTags のリストがあります (ただし、顧客のもののみ)。

顧客のリストから LocationTag を削除する場合、デバイスの LocationTag のリストからもカスケード削除したいと考えています。現在、ドメインオブジェクトクラスの手動コードで動作していますが、私の意見ではDRYに違反しています。

Fluent NHibernate マッピングを介してこれを達成することは可能ですか?

簡略化された Fluent NHib マッピング:

お客様

        public CustomerMap()
    {
        WithTable("Customers");

        Id(x => x.ID)
            .WithUnsavedValue(0)
            .GeneratedBy.Identity();

        Map(x => x.Name);

        HasMany<LocationTag>(t => t.LocationTags).IsInverse();

        HasMany<Device>(d => d.Devices).IsInverse();
    }

デバイス

        public DeviceMap()
    {
        WithTable("Devices");

        Id(x => x.ID)
            .WithUnsavedValue(0)
            .GeneratedBy.Identity();

        Map(x => x.Name);

        HasMany<LocationTag>(x => x.LocationTags).IsInverse();
    }

ロケーションタグ

        public LocationTagMap()
    {
        WithTable("LocationTags");

        Id(x => x.ID)
            .WithUnsavedValue(0)
            .GeneratedBy.Identity();

        Map(x => x.Description);
    }
4

2 に答える 2

0

これが標準のNHibernateでも可能かどうかはわかりません。NHibernate ユーザー メーリング リストで質問するのが一番です。役立つ回答が得られる可能性が高くなります。

于 2009-01-19T23:55:39.377 に答える
0

Customer と LocationTags の間に連想クラスを作成できます。次に、直接 LocationTag ではなく、連想クラスへの FK をデバイスに使用させます。

Customer
- CustomerID (PK)

CustomerLocationTag
- CustomerLocationTagID (PK)
- CustomerID (FK)
- LocationTagID (FK)

LocationTag
- LocationTagID (PK)

Device
- DeviceID (PK)
- CustomerLocationTagID (FK)
于 2009-01-22T15:33:38.953 に答える