NHibernate - 将多个数据库列映射到一个对象

时间:2013-09-26 17:25:45

标签: nhibernate

我有一个数据库(无法更改),其中包含存储在两列中的整个值:

目前,每列都映射到一个属性,我的Domain对象如下所示:

int? Value1
bool IsValue1RealValue

string Value2
bool IsValue2RealValue

bool? Value3
bool IsValue3RealValue

我想将它们放入一个可容纳2或3个值的ValueType中:

- 值(存储在objectT)中   - 布尔值'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;
}

我想知道在这条路上走得更远是不是一个好主意,还是有另一种可能更适合我需要的结构?

1 个答案:

答案 0 :(得分:1)

我认为你正走在正确的轨道上。一个建议 - 您应该能够使FlaggedNullable*Value类具有通用性,这样您就不必创建许多不同的类。

public class FlaggedNullableValue<T>
    where T : struct
{
    public T? Value;
    public bool IsRealValue;
}

看起来你正在使用Fluent NHibernate来指定你的映射。只要您在命名这些列对的方式上保持一致,就应该能够创建一个约定来减轻映射所有这些属性和列名的负担。