1

我有以下類和映射:流利的NHibernate映射的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

我做錯了什麼?

非常感謝

回答

0

倒數()告訴NHibernate的是,「映射到」 -entity會照顧儲蓄的關鍵,那集所有者不應該堅持的關鍵。嘗試刪除該標誌。

+0

但我需要孩子知道父母 - 要知道PlanParameter 和那不能沒有倒數,據我所知, 而孩子不知道的關鍵,不應該,現在我把鑰匙插入小孩的一個財產,但它只是爲了NH的緣故... –