我收到以下错误: 无法将类型为'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>();
建议?
答案 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();