1

我在旧数据库中遇到以下情况 [示例]

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 列)

当我尝试映射到 m 关系时,情况是一样的。

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

4

1 回答 1

0

不幸的是,无法将列指定为主键和外键的一部分,请参见此处了解类似问题

我看到的选项:

  • 做参考.Readonly()
  • 尝试为引用实现 ICompositeUserType 但您将失去急切的加载和查询
于 2012-11-07T08:00:01.577 回答