Индекс списка самоссылки [NH 3.2] - PullRequest
0 голосов
/ 19 августа 2011

У меня есть самоссылочные отношения в сущности, и я не могу понять это на протяжении всей жизни.

У меня есть тип "Project", который имеет ряд свойств, которые дляэтот случай не имеет значения, но интересная часть заключается в следующем:

ca.ManyToOne(x => x.Parent, map =>
{
    map.Class(typeof(Project));
    map.Column("ParentProjectID");
});

ca.List(x => x.Children, map =>
{
    map.Key(k => k.Column("ParentProjectID"));
    map.Index(i =>
    {
        i.Column(x =>
        {
            x.Default(1);
            x.Name("Position");
        });
    });
    map.Inverse(true);
    map.Lazy(CollectionLazy.NoLazy);
    map.Cascade(Cascade.All | Cascade.DeleteOrphans);
},
e => e.OneToMany(x => x.Class(typeof(Project))));

Проблема, с которой я сталкиваюсь, заключается в том, что при создании моих проектов и подпроектов поле «Позиция» не устанавливаетсяв БД он просто остается как «1» или «ноль» в зависимости от опции, которую я установил.Для списка типов вам нужно заполненное поле индекса, если их больше одного, в противном случае вы получите исключение типа ListDictionaryInternal с сообщением «пустой столбец индекса для коллекции» для имени вашей коллекции.

Проект создается в БД импортером, и индекс должен генерироваться автоматически на основе конфигурации сопоставления / NH.

У кого-нибудь есть опыт в этой области?Я просто хочу, чтобы он автоматически заполнил индекс, иначе просто перечисление дочерних элементов не сработает.

1 Ответ

0 голосов
/ 23 августа 2011

На самом деле это была серьезная ошибка в NH 3.2.2000, однако GC был NH 3.2.4000, который, по-видимому, (в основном) исправлял ее.У нас нет времени, чтобы подготовить тестовый проект, чтобы представить его в качестве примера, чтобы показать ошибку.Были выданы неправильные операторы SQL, поэтому ответ должен заключаться в Session.Flush() между некоторыми операторами, особенно когда речь идет о списках со ссылками на себя.

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