Я новичок в NHibernate, и у меня возникают проблемы с поиском лучшего способа представления некоторого SQL-кода с помощью движка Cibereria NHibernate.Вот основное описание объектной модели:
public class Project : EntityBase<Project>
{
// Properties for a project
public virtual Company OwnerCompany { get; set; }
public virtual IList<UserAssignment> UserAssignments { get; set; }
}
public class Company : EntityBase<Company>
{
// Properties for a company
}
public class User : EntityBase<User>
{
// Properties for a user
public virtual Company Company { get; set; }
}
public class UserAssignment : EntityBase<UserAssignment>
{
// Properties for an assignment
public virtual User User { get; set; }
}
Из классов можно вывести, как выглядят базовые таблицы, и все элементы NH находятся в абстрактном классе EntityBase.
По сути, я хочу получить все проекты, принадлежащие определенной компании или имеющие UserAssignments для кого-то из этой компании. Вот как я могу сделать это в SQL:
select P.*
from Project P
where P.OwnerCompany_Id = @CompanyId
or P.Id in (
select Project_Id
from UserAssignment UA
join User U on UA.User_Id = U.Id
where U.Company_Id = @CompanyId
)
Я использую DetachedCriteria,и я даже не могу заставить его работать, просто сопоставляя пользователя UserAssignment с компанией, не говоря уже о назначениях и владельце.Когда я попробовал это:
var criteria = DetachedCriteria
.For<Project>()
.CreateCriteria("UserAssignments")
.Add(Expression.Eq("User.Company.Id", requestingUser.Company.Id));
я получаю сообщение об ошибке «Не удалось разрешить свойство: User.Company.Id TestProject.Domain.UserAssignment.»
Может кто-нибудь помочь?