Хорошо, у меня есть класс, Company
public class Company
{
public virtual int Id { get; set; }
public virtual IList<Role> Roles { get; set; }
}
И еще один класс, Role
public class Role
{
public virtual int Id { get; set; }
public virtual Company Company { get; set; }
public virtual RoleLevel RoleLevel { get; set; }
}
Я использую автообращения Fluent, ничего особенного не происходит.
У меня есть этот метод:
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
передается как 102. Если я проверяю массив allRoles
, один из них относится к Компании # 102.Но запрос, который должен вернуть один Role
, возвращает null
.
Что я делаю не так?
РЕДАКТИРОВАТЬ 1
По запросу, вот запрос выполняется в соответствии с 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
Я попытался изменить базу данных на SQL Server.В SQL Server все это работает.Я предполагаю, что это ошибка с тем, как NHibernate соединяется с базами данных SQLite?Пока я могу использовать БД SQL Server для тестирования, но я бы хотел в будущем использовать БД SQLite в памяти по соображениям скорости.