NHibernate 1到0或1比1

时间:2011-05-15 00:54:19

标签: nhibernate

我有一个用例,我的第一个实体“用户”可能有也可能没有“UserPreferences”。 因此,对于给定用户或最多1个条目,UserPreferences表中没有条目。

我应该使用哪种关联进行建模? 1比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 ......