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

NHibernate一对多映射问题

如何解决《NHibernate一对多映射问题》经验,为你挑选了1个好方法。

我必须映射两个具有外键关系的简单表.其中一个表是包含列id(类型为int的主键),名称,地址guid(新添加且不是主键)的Contact.另一种是phone__number含有列ID(int类型的主键),contact___id(在接触表ID的外键)和phone__number.

Contact表的映射文件如下:



  
    
      
    

    
    
    

    
      
      
    

  

Phone_number表的映射文件是:



  
    
      
    
    
    
  

Contact和PhoneNumber类是:

namespace OfflineDbSyncWithNHibernate.Models
{
    public class Contact
    {
        public virtual int Id { get; set; }
        public virtual string Name { get; set; }
        public virtual string Address { get; set; }
        public virtual string Guid { get; set; }
        public virtual PhoneNumbers PhoneNumbers { get; set; }
    }
}

namespace OfflineDbSyncWithNHibernate.Models
{
    public class PhoneNumber
    {
        public virtual int Id { get; set; }
        public virtual int ContactId { get; set; }
        public virtual string Number { get; set; }
    }
}

namespace OfflineDbSyncWithNHibernate.Models
{
    public class PhoneNumbers : List
    {
    }
}

当我分别加载contact和phone_numbers时,它可以工作,但是在添加set元素以获得一对多关系后,nhibernate会给出一个错误:

NHibernate.MappingException:为类型OfflineDbSyncWithNHibernate.Models.Contact指定的无效映射信息,检查映射文件中是否存在属性类型不匹配

我是nHibernate的新手,所以我不确定set元素中是否有错误,或者我甚至不应该使用它.任何帮助将不胜感激.



1> Brijesh Mish..:

记住这一点

Bag使用IList实现

Set使用ISet实现

List是使用ArrayList或List实现的

使用HashedTable或IDictionary实现Map

如果你想使用IList使用第一个规则,即改变你的hbm.xml来使用Bag而不是Set你的Phonenumbers类应该继承IList而不是List,如果你想使用List你将需要更改你的映射文件以使用List而不是集合.

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