сопоставить таблицу с самим собой в отношениях между родителями и детьми Свободно владеет Nhibernate - PullRequest
1 голос
/ 02 декабря 2010

У меня есть ситуация, когда я сопоставляю столбцы таблицы с первичным ключом той же таблицы. Таблица выглядит так

---+-------+---------
ID  Name    ParentId
---+-------+---------
1   Parent1  0
2   Child 1  1
3   Child 2  1
4   Parent2  0
5   Child 3  4

Я создал следующий класс сопоставления Model и Fluent NHibernate

//Model.LocationType.cs
public class LocationType
    {
        public virtual long Id { get; set; }
        public virtual string ShortName { get; set; }
        public virtual string Description { get; set; }        
        public virtual IList<LocationType> ParentId { get; set; }
    }

и

//Mapping.LocationTypeMap.cs
public class LocationTypeMap : ClassMap<LocationType>
    {
        public LocationTypeMap()
        {
            Table("SET_LOC_TYPE");
            Id(x => x.Id).Column("LOC_TYPE_ID").GeneratedBy.Assigned();
            Map(x => x.ShortName, "SHORT_NAME").Length(15).Not.Nullable();
            Map(x => x.Description, "LOC_DESC").Length(50).Not.Nullable();
            References(x => x.ParentId).Column("PARENT_LOC_TYPE_ID").Cascade.SaveUpdate();
        }
    }

но я получаю следующее сообщение об ошибке при выполнении кода:

Unable to cast object of type 'SmartHRMS.Core.Domain.Model.LocationType' to type 'System.Collections.Generic.IList`1[SmartHRMS.Core.Domain.Model.LocationType]'. 

Редактировать 1: Вместо использования я попытался

HasMany(x => x.ParentIds).KeyColumn("PARENT_LOC_TYPE_ID");

Хотя это сработало и решило проблему приведения, о которой я упоминал выше, но результат, который я получаю, - это противоположность того, что мне нужно. В родительских объектах LocationType он перечисляет все дочерние элементы в IList, поэтому для приведенного выше примера результат будет:

-----+----------+------
ID     Name       ParentId
-----+----------+------
1     Parent1     IList<Child1, Child2>
2     Child 2     IList<Empty>
3 .... same
4     Parent2     IList<Child3>
5     Child 3     IList<Empty>

1 Ответ

1 голос
/ 02 декабря 2010

Похоже, вы должны использовать HasMany в вашем отображении вместо References.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...