我有一个流畅的NHibernate ComponentMap<>映射Nullable<>类型。我的解决方案编译,我的实体保存到我的数据库,但是,我发现保存了null而不是我的实体中的值。
我走了类似以下的路线:
public class PrimBaseMapping<T> : ComponentMap<PrimBase<T>>
where T : struct, IComparable
{
protected virtual string ColumnSqlType { get { return "VARCHAR(50)"; } }
public PrimBaseMapping()
{
this.Map(x => x.NullableValue).CustomSqlType(ColumnSqlType).Nullable();
}
}
其中包括:
public class BoolPrimBaseMapping : PrimBaseMapping<bool>
{
protected override string ColumnSqlType { get { return "BIT"; } }
}
和
public class IntegerPrimBaseMapping : PrimBaseMapping<int>
{
protected override string ColumnSqlType { get { return "INT"; } }
}
有趣的是,也许值得注意的是,我还有一个名为Dimension的Component-mapped类,它实际上是一个PrimBase DimensionType(它支持Nullable Dimension Type):
public class DimensionMapping : ComponentMap<Dimension>
{
private string ColumnSqlType { get { return "VARCHAR(5)"; } }
public DimensionMapping()
{
this.Map(x => x.NullableValue).CustomSqlType(ColumnSqlType).Nullable();
}
}
我说这很有趣,因为我的维度组件映射实际上确实保存到我的数据库。
我的第一个想法是,也许我正在使PrimBaseMapping过于复杂,以至于我可能会让它看起来更像是Dimension Component映射,但我想先把它放在那里以获得第二个意见。