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

时间:2009-10-01 21:06:54

标签: nhibernate

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

为类型[类型]指定的映射信息无效,请检查映射文件中是否存在属性类型不匹配“。

这是我的定义:

<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>();

建议?

3 个答案:

答案 0 :(得分:10)

NHibernate需要接口。尝试使用ISet<ProcessTrackerDetail>代替SortedSet<ProcessTrackerDetail>

答案 1 :(得分:2)

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

private ISet<ProcessTrackerDetail> _processTrackerDetails = 
    new SortedSet<ProcessTrackerDetail>();

你仍然可以将它分配给一个SortedSet,但我不确定它在延迟加载时会做多少,因为NHibernate将使用它的ISet实现来进行延迟加载。映射中的sort =“natural”应该处理排序顺序。

答案 2 :(得分:0)

如果您使用'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();