0

私のシナリオは、Userクラスがあり、そのクラスを関連データで拡張する必要がありますが、サブクラス化する必要はありません。

たとえば、ユーザーはAddressProfileDataFavoritesProfileData、 などのさまざまなプロファイル データを多数持っている場合があります。

私は抽象クラスと多くの実装を使用することにしました。この記事のようなものです:継承マッピング

ただし、たとえば、各項目AddressProfileDataがユーザーごとに 1 回だけ発生することを (プログラムではなく nhibernate を使用して) 保証する方法が見つかりません。

これは可能ですか?そうでない場合、この問題のより適切な別の解決策はありますか? 共通の抽象クラスを共有することは、NHibernate を中心にアプリを構築することであり、その逆ではないと感じています。

4

1 に答える 1

0

AddressProfileDataFavoritesProfileDataは、どちらも に付加する追加情報であるという事実を除いて、ほとんど共通点を共有しない可能性が高いため、Userそれらを継承階層の一部にすることは意味がないと思います。代わりに、次のようなものを使用します。

public class User
{
    // ... other properties ...
    public virtual AddressProfileData Address { get; set; }
    public virtual FavoritesProfileData Favorites { get; set; }
}

public class AddressProfileData
{
    // ... other properties ...
    public virtual User User { get; set; }
}
<class name="User">
    <!-- ... other properties ... -->
    <one-to-one name="Address" property-ref="User" />
    <one-to-one name="Favorites" property-ref="User" />
</class>

<class name="AddressProfileData">
    <!-- ... other properties ... -->
    <many-to-one name="User" column="User_id" unique="true" not-null="true" />
</class>
create table AddressProfileData (
    /* ... other columns ... */
    User_id int not null,
    unique (User_id),
    foreign key (User_id) references User (Id)
);

どんな感じかは想像できるとFavoritesProfileData思います。

この設定により、各タイプのプロファイル データがユーザーごとに 1 回だけ発生することが保証されます。また、何かを行う前に、どのタイプの ProfileData を扱っているかをテストする必要があるという奇妙な場所に陥ることもありません。それ。どの種類のプロファイル データに触れているかを常に正確に把握できます。

于 2013-08-16T04:05:45.163 に答える