Я в настоящее время изучаю NHibernate самостоятельно (читаю поваренную книгу NHibernate 3.0), поэтому я ни в коем случае не эксперт.
У меня сейчас такая же проблема, когда у меня есть родительская карта HasMany-map.среда SQLite.Это также приводит к ошибке синтаксиса Index.
Из того, что мне удалось вывести, Index является зарезервированным ключевым словом (не так ли почти во всех RDBMS?).Кажется, эти ключевые слова по умолчанию не экранированы, и, следовательно, SQL-скрипт недопустим.
Согласно книге, вы можете избежать имен столбцов, добавив обратный кавычка к имени столбца:
HasMany(x => x.Children).Cascade.AllDeleteOrphan().AsList(p => p.Column("`Index"));
Однако, хотя это «работает», он генерирует следующий SQL-запрос, который, по-видимому, отбросил x:
create table Child (
Id INTEGER not null,
ChildType TEXT not null,
Version INTEGER not null,
Content TEXT,
Title TEXT not null,
Parent_id INTEGER,
"Inde" INTEGER,
primary key (Id)
)
Так что, либо рассмотрим:
- указав пользовательское индексное имя столбца, которое не является ключевым словом,
- полагается на автоматический переход с обратной косой чертой (не знаю, что здесь происходит, нет времени проверять)
- использовать другую коллекциювведите, если вам не нужен упорядоченный список.См. Список против Set против Bag в NHibernate