我有以下实体
Country
,State
,City
我还有User
实体。
Country
,State
和City
与用户实体没有关系。
User
与Country
,State
或City
没有直接关系。
我希望能够以这种方式更新用户地址详细信息
用户将选择国家,州和城市并保存此值。
我正在考虑引入将存储此用户地址信息的Address
值对象。
这是个好主意吗?你会如何处理这种情况?
我使用nhibernate orm并使用Conformist进行映射(通过代码方法进行映射) 所以我在考虑将Address映射为值对象
Component(c => c.Address, AddressMap.Mapping());
public class AddressMap
{
public static Action<IComponentMapper<Address>> Mapping()
{
return c =>
{
c.Property(p => p.Country);
c.Property(p => p.State);
c.Property(p => p.City);
};
}
}
在UserMap
Component(c => c.Address, AddressMap.Mapping());
我收到了以下错误
NHibernate.SessionProvider&#39;的类型初始值设定项。扔了一个 例外。 {&#34;无法确定类型:Model.Country,...,for columns:NHibernate.Mapping.Column(Country)&#34;}
Component(c => c.Address, AddressMap.Mapping());
中没有此行UserMap
我没有任何错误(我也没有映射地址值对象:)。
答案 0 :(得分:2)
我想说,这个问题来自于Country
不是值类型(包括字符串),而是一个参考。如果是这种情况,我们不能将其映射为c.Property()
,而是作为参考:
c.ManyToOne(p => p.Country, "CountryId"); // reference
c.Property(p => p.State); // value types represented
c.Property(p => p.City); // by values in columns
有关详细信息,请参阅:Mapping-by-Code - ManyToOne
ManyToOne(x => x.PropertyName, m =>
{
m.Column("column_name");
// or...
m.Column(c =>
{
c.Name("column_name");
// other standard column options
});
...
// many more