У меня есть отображение Fluent NHibernate, которое работает, как и ожидалось, когда я запускаю его для фактической базы данных SQL Server, но при этом не запускает коллекцию дочерних объектов при запуске с SQLite. Запрашиваемая структура представляет собой иерархию учетных записей с самостоятельными ссылками, в которой каждая учетная запись может иметь одну родительскую и 0-M дочернюю учетные записи. Родительская учетная запись загружается правильно, но список дочерних объектов всегда возвращается null
.
Базовая структура таблицы выглядит примерно так ( Примечание: Я пропустил большинство полей, которые не имеют ничего общего с этой проблемой.)
Account
-------
AccountID
Title
ParentAccountID
Класс Account выглядит так:
public class Account
{
public virtual int ID { get; set; }
public virtual string Title { get; set; }
public virtual Account ParentAccount { get; set; }
public virtual IList<Account> ChildAccounts { get; set; }
}
Отображение для класса Account выглядит следующим образом:
public class AccountMap : ClassMap<Account>
{
public AccountMap()
{
Table("Accounts");
Id(a => a.ID).Column("AccountID").GeneratedBy.Assigned();
Map(a => a.Title);
HasMany<Account>(a => a.ChildAccounts)
.Table("Accounts")
.KeyColumn("ParentAccountID")
.ForeignKeyConstraintName("AccountID")
.OrderBy("Title")
.Inverse();
References<Account>(a => a.ParentAccount).Column("ParentAccountID");
}
}
Данные в таблице «Учетные записи» в базе данных SQLite, когда я пытаюсь получить идентификатор учетной записи:
ID Title ParentAccountID
-- ----- ---------------
1 Account1 null
2 Account2 1
3 Account3 2
4 Account4 2
Когда я звоню session.Get<Account>(2)
я получаю следующий объект:
{
ID: 2,
Title: "Account2",
ParentAccount:
{
ID: 1,
Title: "Account1",
ParentAccount: null,
ChildAccounts: null
},
ChildAccounts: null
}
Выполнение одного и того же вызова для реального возврата базы данных SQL Server:
{
ID: 2,
Title: "Account2",
ParentAccount:
{
ID: 1,
Title: "Account1",
ParentAccount: null,
ChildAccounts:
{
ID: 2,
Title: "Account2",
ParentAccount:
{
...
},
ChildAccounts:
{
...
}
}
},
ChildAccounts:
[
{
ID: 3,
Title: "Account3",
ParentAccount:
{
ID: 2,
Title: "Account2",
ParentAccount:
{
...
},
ChildAccounts:
{
...
}
},
ChildAccounts: null
},
{
ID: 4,
Title: "Account4",
ParentAccount:
{
ID: 2,
Title: "Account2",
ParentAccount:
{
...
},
ChildAccounts:
{
...
}
},
ChildAccounts: null
}
]
}
Я действительно не понимаю, почему это будет работать в SQL Server, а не в SQLite, но это затрудняет написание теста, чтобы убедиться, что мои отображения и код репозитория работают правильно, очень сложно.