我有一个Fluent NHibernate映射,当我按照实际的SQL Server数据库运行它时,它的工作方式与预期的一样,但运行时不会弹出一个子对象集合针对SQLite。被查询的结构是一个自我引用的帐户层次结构,其中每个帐户可能有一个父代和0-M个子帐户。父帐户正在正确加载,但子对象的列表始终返回null
。只有当使用SQLite时才填充子对象(在SQL Server中工作)
基本表的结构看起来是这样的(注:我省略了大部分没有什么关系这一问题的字段)
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; }
}
的账户类别的映射是这样的:
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");
}
}
个
在当我试图提取帐户ID 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
}
]
}
我真的不明白为什么这将b e在SQL Server中工作,但不在SQLite中,但它使得编写测试能够确保我的映射和存储库代码正常工作,非常困难。