J'ai un mappage NHibernate Fluent qui fonctionne comme prévu lorsque je l'exécute sur la base de données SQL Server réelle, mais qui ne parcourt pas une collection d'objets enfants lors de l'exécution contre SQLite. La structure à interroger est une hiérarchie de comptes autoréférentielle dans laquelle chaque compte peut avoir un compte parent et un compte enfant 0-M. Le compte parent est chargé correctement, mais la liste des objets enfants revient toujours null
.Les objets enfants ne sont pas remplis uniquement lors de l'utilisation de SQLite (Works in SQL Server)
La structure de la table de base ressemble à ceci (Note:. Je l'ai laissé de côté la plupart des champs qui n'ont rien à voir avec cette question)
Account
-------
AccountID
Title
ParentAccountID
Les looks de classe compte comme:
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; }
}
la cartographie de la classe compte ressemble:
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");
}
}
Les données du tableau des comptes dans la base de données SQLite quand je suis en train de récupérer l'identifiant du compte:
ID Title ParentAccountID
-- ----- ---------------
1 Account1 null
2 Account2 1
3 Account3 2
4 Account4 2
Quand je fais l'appel session.Get<Account>(2)
je reviens l'objet suivant:
{
ID: 2,
Title: "Account2",
ParentAccount:
{
ID: 1,
Title: "Account1",
ParentAccount: null,
ChildAccounts: null
},
ChildAccounts: null
}
Exécution du même appel sur le retour de la base de données SQL Server réel:
{
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
}
]
}
Je ne comprends vraiment pas pourquoi cela b e travaille dans SQL Server mais pas dans SQLite, mais il fait un test d'écriture pour s'assurer que mes mappings et le code du référentiel fonctionnent correctement, très difficile.