2010-12-02 47 views
2

我有一个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中,但它使得编写测试能够确保我的映射和存储库代码正常工作,非常困难。

回答

0

您是否尝试过使用sql profiler来剖析sqlite数据库?我假设profiler与sqlite一起工作,但我从来没有尝试过。

另一件要看的东西是nhibernate日志文件。通常当我有这样的问题时,这两个工具就是我开始的地方。