我有一个用例,我的第一个实体“用户”可能有也可能没有“UserPreferences”。 因此,对于给定用户或最多1个条目,UserPreferences表中没有条目。
我应该使用哪种关联进行建模? 1比1或多比1?
由于
答案 0 :(得分:2)
您可以使用多对一关联。这是FNH映射很简单:
public class UserMap : ClassMap<User>
{
public UserMap()
{
Id(x => x.Id);
Map(x => x.Name);
References(x => x.Preferences)
.Cascade.All();
}
}
现在,Preferences属性可以为null,但可以将一个用户Preferences实例分配给User的许多实例。这可以在域模型端处理(例如,参见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();
}
}
但它有一些缺点。例如。关联必须是双向的,并且不支持all-delete-orphan ......