AddressProfileData
とFavoritesProfileData
は、どちらも に付加する追加情報であるという事実を除いて、ほとんど共通点を共有しない可能性が高いため、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 を扱っているかをテストする必要があるという奇妙な場所に陥ることもありません。それ。どの種類のプロファイル データに触れているかを常に正確に把握できます。