nhibernate映射多个复合键thowing System.IndexOutOfRangeException

时间:2012-11-05 13:32:06

标签: nhibernate mapping composite

遗留数据库[示例]

中存在以下情况
table1   
**ID_TABLE1 [PK]   
ID_SOURCE** [PK]   


table2   
**ID_TABLE2 [PK]   
ID_SOURCE** [PK]   


table3   
**ID_TABLE3 [PK]   
ID_SOURCE** [PK][FK]   
ID_TABLE2 [FK]   
ID_TABLE1 [FK]   



 public partial classTable3Map : ClassMap<TABLE3>
    {
        public classTable3Map()
        {
            Table("TABLE3");
            LazyLoad();
            CompositeId().KeyProperty(x => x.ID_TABLE3 , "ID_TABLE3").KeyProperty(x => x.ID_SOURCE, "ID_SOURCE");
          References(x => x.TABLE1).Columns("ID_TABLE1 ", "ID_SOURCE");
          References(x => x.TABLE2).Columns("ID_TABLE2 ", "ID_SOURCE");
        }
    }

当我尝试保存这种类型的对象时,nhibernate会抛出一个

**System.IndexOutOfRangeException**    
  Message=Index xx non valid  for xxxParameterCollection

我会看到它有更多输入然后参数(重复ID_SOURCE列)

当我尝试将n映射到m时,关系是相同的情况。

我可以保存,如果我映射id而不是对象(引用)并在插入之前保存子项,但我必须重写模型并进行许多手动调整。

1 个答案:

答案 0 :(得分:0)

不幸的是,无法将列指定为主键和外键see here for similar question的一部分。

我看到的选项:

  • 制作参考.Readonly()
  • 尝试为引用实现ICompositeUserType,但您将失去急切的加载和查询