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();
}
}
但它也有一些缺點。例如。協會必須是雙向的,並且不支持全部刪除孤兒...