Проблема с коллекциями nHibernate (проверьте файл сопоставления на предмет несоответствия типов свойств) - PullRequest
3 голосов
/ 02 октября 2009

Я получаю следующую ошибку: Невозможно привести объект типа '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 ]

10 голосов
/ 02 октября 2009

NHibernate требует интерфейсов. Попробуйте использовать ISet<ProcessTrackerDetail> вместо SortedSet<ProcessTrackerDetail>

2 голосов
/ 20 октября 2009

Измените ваш код, чтобы определить _processTrackerDetails с помощью интерфейса ISet.

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

Вы все еще можете назначить его на SortedSet, но я не уверен, что он много делает, когда ленивый загружается, так как NHibernate будет использовать свою реализацию ISet для ленивой загрузки. Sort = "natural" в вашем отображении должен заботиться о порядке сортировки.

0 голосов
/ 01 февраля 2011

Если вы используете тип отношения '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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...