3
我有一个用例,我的第一个实体“用户”可能会或可能没有“UserPreferences”。 因此,对于给定用户或最大1条目,UserPreferences表中没有条目。NHibernate的1到0或1到1
我应该使用哪种关联进行建模? 1比1还是多比1?
谢谢
我有一个用例,我的第一个实体“用户”可能会或可能没有“UserPreferences”。 因此,对于给定用户或最大1条目,UserPreferences表中没有条目。NHibernate的1到0或1到1
我应该使用哪种关联进行建模? 1比1还是多比1?
谢谢
您可以使用多对一的关联。这是FNH映射很简单:
public class UserMap : ClassMap<User>
{
public UserMap()
{
Id(x => x.Id);
Map(x => x.Name);
References(x => x.Preferences)
.Cascade.All();
}
}
现在首选项属性可以为空,但可以将一个用户首选项实例分配给用户的许多实例。这可以在域模型方面处理(例如,参见DDD中的聚合根)。
如果您需要在数据库端的约束那就最好使用一个一对一的关联(通过主键):
public class UserMap : ClassMap<User>
{
public UserMap()
{
Id(x => x.Id);
Map(x => x.Name);
HasOne(x => x.Preferences)
.Cascade.All();
}
}
public class UserPreferencesMap : ClassMap<UserPreferences>
{
public UserPreferencesMap()
{
Id(x => x.Id).GeneratedBy.Foreign("User");
Map(x => x.Name);
HasOne(x => x.User).Constrained();
}
}
但它也有一些缺点。例如。协会必须是双向的,并且不支持全部删除孤儿...