当前位置:  开发笔记 > 编程语言 > 正文

NHibernate映射 - 一对一(或一对零)

如何解决《NHibernate映射-一对一(或一对零)》经验,为你挑选了2个好方法。

NHibernatians!

我有一张桌子[dbo].[Wibble]和另一张桌子[dbo].[WibbleExtended].

[Wibble]是主表,[WibbleExtended]是一个可选表,其中存储了一些其他字段.[WibbleExtended]表中的条目远少于主[Wibble]表.我认为这是在当天完成的,以解决一些空间问题(Wibble有很多行,而WibbleExtened有很多列).

每个表的ID都是相同的,来自外部源.

[dbo].[Wibble].[WibbleId]

[dbo].[WibbleExtended].[WibbleId]

是相同的,这两个表是如何相关的.

注意我无法更改架构.我对这个我几乎无法控制的遗留系统非常感兴趣.

在它周围搜索似乎一对一的映射是有问题的,并且流行的智慧是使用两个多对一映射.

我的映射目前是:


   
      
   

   


   
        
   

        
 

这个问题是我遇到了诸如此类的错误

System.IndexOutOfRangeException: Invalid index n for this SqlParameterCollection with Count=n.

我环顾四周,看起来确实是正确的策略,它只是落在了最后的障碍.

问题是id生成器吗?映射的其他方面?

正确答案的免费碎肉馅饼.

编辑:好的 - 这就是我通过@James Gregory解决这个问题的方法.

    将单元测试从WibbleExtended测试移至Wibble测试类并进行必要的修改.

    在Wibble.hbm.xml中添加了以下内容

    
         
         
             
    
    

    为Wibble POCO添加了相应的属性.

    删除了与WibbleExtended相关的所有代码.

    运行测试,全部通过,签入.构建通过.去了一个圣诞节啤酒(因此我更新了这几天!:-))

Jalal El-Sha.. 11

你得到的错误:

具有Count = n的此SqlParameterCollection的索引n无效.

是由于两个属性映射到同一列.在其中一个中使用insert = false和update = false.

参考http://groups.google.com/group/nhusers/browse_thread/thread/84830b1257efd219



1> Jalal El-Sha..:

你得到的错误:

具有Count = n的此SqlParameterCollection的索引n无效.

是由于两个属性映射到同一列.在其中一个中使用insert = false和update = false.

参考http://groups.google.com/group/nhusers/browse_thread/thread/84830b1257efd219



2> James Gregor..:

您是否考虑过使用NHibernate 2.0中引入的Join元素?此元素允许您连接多个表以形成一个实体; 这种关系也可以是可选的.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有