nHibernate集合问题(检查映射文件中的属性类型不匹配)

nHibernate集合问题(检查映射文件中的属性类型不匹配),nhibernate,Nhibernate,我得到以下错误: 无法将类型为“NHibernate.Collection.Generic.PersistentGenericSet”的对象强制转换为类型为“Iesi.Collections.Generic.SortedSet” 为类型[type]指定的映射信息无效,请检查映射文件中的属性类型不匹配” 以下是我的集合定义: <set name="ProcessTrackerDetails" lazy="true" access="field.camelcase-underscore"

我得到以下错误: 无法将类型为“NHibernate.Collection.Generic.PersistentGenericSet”的对象强制转换为类型为“Iesi.Collections.Generic.SortedSet”

为类型[type]指定的映射信息无效,请检查映射文件中的属性类型不匹配”

以下是我的集合定义:

<set name="ProcessTrackerDetails" lazy="true" access="field.camelcase-underscore" 
                sort="natural" cascade="all" inverse="true">
  <key column="ProcessTrackerDetailsID"/>
  <one-to-many class="ProcessTrackerDetail"></one-to-many>
</set>

代码如下:

private Iesi.Collections.Generic.SortedSet<ProcessTrackerDetail> _processTrackerDetails = new SortedSet<ProcessTrackerDetail>();
private Iesi.Collections.Generic.SortedSet_processTrackerDetails=new SortedSet();

建议?

NHibernate需要接口。尝试使用
ISet
而不是
SortedSet

使用ISet接口更改代码以定义_processTrackerDetails

private ISet<ProcessTrackerDetail> _processTrackerDetails = 
    new SortedSet<ProcessTrackerDetail>();
private ISet\u processTrackerDetails=
新的分类集();

您仍然可以将其分配给SortedSet,但我不确定它在延迟加载时是否有多大作用,因为NHibernate将使用它的ISet实现来执行延迟加载。映射中的sort=“natural”应该负责排序顺序。

如果您使用的是“Set”关系类型(唯一的项集,NHibernate.Collection.Generic.PersistentGenericSet)然后可以使用System.Collections.Generic.ICollection定义映射,并使用System.Collections.Generic.HashSet

我正在使用Castle ActiveRecord,下面是我正在使用的代码:

// In the Collections entity mapping
    [HasAndBelongsToMany(typeof(Region),
    Table = "CollectionRegionAssociation", ColumnKey = "CollectionId", ColumnRef = "RegionId", RelationType = RelationType.Set)]
    public virtual System.Collections.Generic.ICollection<Region> Regions { get; set; }

// Creating and saving a new object
    var c = new Collection(); // my own entity
    c.Regions = new System.Collections.Generic.HashSet<Region>();
    c.Regions.Add(new Region() { ... });
    c.Save();
//在集合实体映射中
[Hasandbelongtomany(地区类型),
Table=“collectionRegionaAssociation”,ColumnKey=“CollectionId”,ColumnRef=“RegionId”,RelationType=RelationType.Set)]
公共虚拟系统.Collections.Generic.ICollection区域{get;set;}
//创建和保存新对象
var c=new Collection();//我自己的实体
c、 Regions=new System.Collections.Generic.HashSet();
c、 Regions.Add(newregion(){…});
c、 Save();

我不确定您是想尝试实例化该接口(不起作用)…还是想使用集合而不是排序集合(也不起作用,我需要排序集合)…这里可能缺少一些基本信息。您需要在类中使用接口,而不是在类中使用接口。nhibernate需要接口来跟踪对集合所做的更改。