Nhibaernate 在使用Iset<>Invalid Cast错误

来源:互联网 发布:冬天保湿面霜推荐 知乎 编辑:程序博客网 时间:2024/05/22 00:37

  

Invalid Cast (check your mapping for property type mismatches);

setter of NHibernateSample.Domain.Entities.Customer(查询报错)

使用:public virtual ISet<ShipFisGear> ShipFisGear { get; set; }

ISet查询其实是:

set
集合中的对象是唯一的,无序的,不能通过索引、key值访问,只能使用enumerator列举集合对象。
.Net没有原生的set类,所以NHibernate使用Iesi.Collections的set。
不同的set实现可能存在一些差异,因此导致set表现出来的特性不大一样,但在设计、使用上的主要原则是将set看作唯一、无序的。
Iesi.Collections中,基于System.Collections.SortedList实现的ListSet在列举集合对象时顺序跟添加到set的顺序一致,但基于System.Collections.HashTable实现的HashSet就不一致了。HashSet根据对象的GetHashCode()返回值判断对象是否相等,而ListSet则使用对象的Equals()方法进行判断,所以如果没有注意重载GetHashCode()和Equals()方法,在保证唯一性上就有问题。HybridSet是Iesi.Collections中的一个混合类型,基于System.Collections.Specialized.HybridDictionary实现,主要是出于性能的考虑,内部实现会根据集合中对象的数量,自动在ListSet和HashSet两种类型间转换。
另外Iesi.Collections中的SortedSet允许提供一个IComparer接口,这样在列举集合对象时将按照IComparer提供的方法排序

解决办法:

using System;
//using  Sytem.Collections.Generic;
using System.Linq;
using System.text
using Iesi.Collections.Generic;
 
 去掉//using  Sytem.Collections.Generic;换成using Iesi.Collections.Generic;
 
原创粉丝点击