D'accord, j'ai une classe, Company
Je ne peux pas comprendre ce que je fais mal avec cette base NHibernate requête
public class Company
{
public virtual int Id { get; set; }
public virtual IList<Role> Roles { get; set; }
}
Et une autre classe, Role
public class Role
{
public virtual int Id { get; set; }
public virtual Company Company { get; set; }
public virtual RoleLevel RoleLevel { get; set; }
}
J'utilise la Automappings fluides, rien de spécial en cours.
J'ai cette méthode:
private RoleLevel GetRole(int companyId)
{
var allRoles = Session.CreateCriteria<Role>().List<Role>();
var role = Session.CreateCriteria<Role>()
.CreateAlias(NameOf<Role>.Property(r => r.Company), "c")
.Add(Restrictions.Eq("c.Id", companyId))
.UniqueResult<Role>();
return (role == null) ? RoleLevel.Restricted : role.RoleLevel;
}
companyId
est transmis en tant que 102. Si je vérifie le tableau allRoles
, l'un d'entre eux concerne la société # 102. Mais la requête qui est censée renvoyer un seul Role
renvoie null
.
Qu'est-ce que je fais mal?
EDIT 1
Sur demande, voici la requête en cours d'exécution, selon NHProf:
SELECT this_.Id as Id75_1_,
this_.Version as Version75_1_,
this_.RoleLevel as RoleLevel75_1_,
this_.DbDate as DbDate75_1_,
this_.Account_id as Account5_75_1_,
this_.Company_id as Company6_75_1_,
c1_.Id as Id71_0_,
c1_.Version as Version71_0_,
c1_.Name as Name71_0_,
c1_.OnyxAlias as OnyxAlias71_0_,
c1_.DbDate as DbDate71_0_,
c1_.Parent_Id as Parent6_71_0_
FROM "Role" this_
inner join "Company" c1_
on this_.Company_id = c1_.Id
WHERE c1_.Id = 102 /* @p0 */
EDIT 2
J'ai essayé de changer la base de données SQL Server. Dans SQL Server, tout fonctionne. Je suppose que c'est un bug avec la façon dont NHibernate se connecte aux bases de données SQLite? Pour l'instant, je peux utiliser une base de données SQL Server à des fins de test, mais j'aimerais utiliser une base de données In Memory SQLite à l'avenir, pour des raisons de rapidité.
utilisez-vous SQL Server? Si oui, essayez d'exécuter une trace sur le serveur et voir la requête. cela pourrait vous aider à détecter si vous faites quelque chose de mal. – devnull
Ceci est dans un test, donc il utilise SQLite. Je vais ajouter la requête en cours d'exécution à ma question. –
NHProf devrait avoir une option en bas - "voir n lignes résultant de cette requête." Y a-t-il des résultats? (Vous devrez configurer la connexion dans NHProf pour utiliser cette fonctionnalité.) – Jay