我是 NHibernate 的新手,我无法找出使用 NHibernate 的 Criteria 引擎来表示某些 SQL 的最佳方式。这是对象模型的基本描述:
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));
我收到一条错误消息,提示“无法解析属性:TestProject.Domain.UserAssignment 的 User.Company.Id。”
任何人都可以帮忙吗?