NHibernate-将多个数据库列映射到一个对象
我有一个数据库(无法更改),其中包含一整批存储在两列中的值: 当前,每个列都映射到一个属性,我的域对象如下所示:NHibernate-将多个数据库列映射到一个对象,nhibernate,Nhibernate,我有一个数据库(无法更改),其中包含一整批存储在两列中的值: 当前,每个列都映射到一个属性,我的域对象如下所示: int? Value1 bool IsValue1RealValue string Value2 bool IsValue2RealValue bool? Value3 bool IsValue3RealValue 我想把它们放入一个ValueType中,它可以保存2或3个值: -值(存储在对象或T中) -布尔值“RealValue” -和(可选).NET属性名称的名称 目前,
int? Value1
bool IsValue1RealValue
string Value2
bool IsValue2RealValue
bool? Value3
bool IsValue3RealValue
我想把它们放入一个ValueType中,它可以保存2或3个值:
-值(存储在对象
或T
中)-布尔值“RealValue”
-和(可选).NET属性名称的名称 目前,我有以下NHibernate映射:
Component(x => x.Value1, fdf =>
{
fdf.Map(f => f.Value).Column("Value1");
fdf.Map(f => f.IsRealValue).Column("IsValue1RealValue");
});
Value1
具有以下类型:
public class FlaggedNullableIntValue
{
public int? Value;
public bool IsRealValue;
}
我的域对象将如下所示:
public class DomainEntity
{
public virtual FlaggedNullableIntValue Value1;
public virtual FlaggedStringValue Value2;
public virtual FlaggedNullableBooleanValue Value3;
}
我想知道沿着这条路走得更远是不是一个好主意,或者是否有另一种结构更适合我的需要 我认为你的思路完全正确。一个建议-您应该能够将
FlaggedNullable*值
类设置为通用类,这样您就不必创建大量不同的类
public class FlaggedNullableValue<T>
where T : struct
{
public T? Value;
public bool IsRealValue;
}
public类FlaggedNullableValue
其中T:struct
{
公共价值观;
公共价值观;
}
看起来您正在使用Fluent NHibernate指定映射。只要这些列对的命名方式保持一致,就应该能够创建一个约定,以减轻映射所有这些属性和列名的负担。我想我不明白。你希望你的模特看起来怎么样?如果
值的类型为int?
,则存在那些T
或对象
?你想映射什么属性名称?我已更新了我的问题。对于数据库中的每个值+IsRealValue组合,该模型将有1个属性。值当前仍为int,但理想情况下,映射对象将能够将int、bool和字符串作为值的类型处理。您是否询问nHibernate是否具有转换行(对象)中的列的功能?如果是这样,我很确定这是不可能的。您必须手动映射每一对。您只能将一个DB列映射到一个属性,这是NHibernate的限制
(如果这是限制)@Rippo,实际上,使用@Laoujin演示的组件是将多个列映射到一个属性的一种方法。另一种方法是定义一个ICompositeUserType
。我们最终使用了ICompositeUserType
(根据您的评论)。到目前为止,它运行得很好。