AddressProfileData
并且FavoritesProfileData
可能几乎没有共享任何共同点,除了它们都是附加到 a 的额外信息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
样子的。
使用此设置,您可以确保每种类型的配置文件数据每个用户只出现一次,并且您也不会在一个奇怪的地方结束,您必须测试您正在处理的 ProfileData 类型,然后才能执行任何操作它。您始终确切地知道您所接触的个人资料数据类型。