Fluent NHibernate Mapping IDictionary<Enum,Class> - 密钥另存为空



我有以下类和映射:

public enum VariationType
{
    Base = 1,
    RiderMain = 2,
    RiderSpouse = 3,
    RiderChild = 4,
    Family = 5,
    FamilyBase = 6
}
public class PlanParameter
{
    private IDictionary<VariationType, PlanParameterDefaultValue> _defaultValues;
    public PlanParameter()
    {
        ParameterContext = new Parameter();
    }
    public virtual Parameter ParameterContext { get; set; }
    public virtual object DefaultValue { get; set; }
    public virtual string DefaultValueString
    {
        get
        {
            return DefaultValue == null ? null : DefaultValue.ToString();
        }
        set
        {
            DefaultValue = value == null ? null : Convert.ChangeType(value, ParameterContext.Type);
        }
    }
    public virtual IDictionary<VariationType, PlanParameterDefaultValue> DefaultValues
    {
        get
        {
            if (_defaultValues == null)
                _defaultValues = new Dictionary<VariationType,  PlanParameterDefaultValue>();
            return _defaultValues;
        }
    }
}
class PlanParameterMap : ClassMap<PlanParameter>
{
    public PlanParameterMap()
    {
        Id().GeneratedBy.Identity().Column("ID");
        References(x => x.ParameterContext,"ParameterID");
        Map(x => x.DefaultValueString);
        HasMany(x=> x.DefaultValues)
            .Access.CamelCaseField(Prefix.Underscore)
            .KeyColumn("PlanParameterID").Inverse()
            .AsMap("Variation")
            .Cascade.AllDeleteOrphan();
    }
}

public class PlanParameterDefaultValue
{
    public virtual PlanParameter PlanParameter { get; set; }
    public virtual object DefaultValue { get; set; }
    public virtual string DefaultValueString
    {
        get
        {
            return DefaultValue == null ? null : DefaultValue.ToString();
        }
        set
        {
            DefaultValue = value == null ? null : Convert.ChangeType(value, PlanParameter.ParameterContext.Type);
        }
    }
}

class PlanParameterDefaultValueMap : ClassMap<PlanParameterDefaultValue>
{
    public PlanParameterDefaultValueMap()
    {
        Id().GeneratedBy.Identity().Column("ID");
        Map(x => x.DefaultValueString);
        References(x => x.PlanParameter).Column("PlanParameterID");
    }
}

我的问题非常特定于映射

IDictionary<VariationType, PlanParameterDefaultValue> DefaultValues

由于某种原因,枚举不会保存,保存在其列中的所有内容均为空到目前为止,我唯一的解决方案是将 VariationType 属性添加到实体并使用 lambda 公式映射它,但我真的不需要实体中的 VariationType

我做错了什么吗?

非常感谢

Inverse() 告诉 NHibernate,"映射到"实体将负责保存密钥,并且集合所有者不应保留密钥。尝试删除该标志。

最新更新