我必须映射两个具有外键关系的简单表.其中一个表是包含列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元素中是否有错误,或者我甚至不应该使用它.任何帮助将不胜感激.
记住这一点
Bag使用IList实现
Set使用ISet实现
List是使用ArrayList或List实现的
使用HashedTable或IDictionary实现Map
如果你想使用IList使用第一个规则,即改变你的hbm.xml来使用Bag而不是Set你的Phonenumbers类应该继承IList而不是List,如果你想使用List你将需要更改你的映射文件以使用List而不是集合.