1

私は次のクラスとマッピングを持っています:

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

何らかの理由で列挙型が保存されません。その列に保存されているものはすべてnullです。これまでの唯一の解決策は、VariationTypeプロパティをエンティティに追加し、ラムダ式でマップすることでしたが、実際には、VariationTypeは必要ありません。実在物

私は何か間違ったことをしていますか?

どうもありがとう

4

1 に答える 1

0

Inverse() は、NHibernate に、「マップ先」エンティティがキーの保存を処理し、コレクションの所有者がキーを永続化してはならないことを伝えます。そのフラグを削除してみてください。

于 2013-01-24T20:29:19.193 に答える