使用ICriteria接口选择NHibernate中不在集合中的对象
在我的系统中,用户拥有0个或更多类别。以下是我的模型类的简化版本:使用ICriteria接口选择NHibernate中不在集合中的对象,nhibernate,icriteria,Nhibernate,Icriteria,在我的系统中,用户拥有0个或更多类别。以下是我的模型类的简化版本: public class User { public virtual String Name {get; set;} public virtual IList<Category> Categories { get; set; } } public class Category { public virtual String Title {get; set;} } 公共类用户 { 公共虚拟字
public class User
{
public virtual String Name {get; set;}
public virtual IList<Category> Categories { get; set; }
}
public class Category
{
public virtual String Title {get; set;}
}
公共类用户
{
公共虚拟字符串名称{get;set;}
公共虚拟IList类别{get;set;}
}
公共类类别
{
公共虚拟字符串标题{get;set;}
}
现在我想创建一个ICriteria查询来选择所有未分配给用户的类别,但我被卡住了。理想情况下,我不想创建一个从类别到用户的导航属性,但凭借我对NHibernate的初级知识,这是我能看到的唯一解决方案
是否有ICriteria查询可以对当前的数据模型类执行此操作
谢谢你的帮助。这是我不知道的,但可能是一个有用的指针
var crit = _session.CreateCriteria<Category>("c")
.Add(
Subqueries.PropertyNotIn("c.id",
DetachedCriteria.For<User>("u")
.CreateCriteria("Categories","uc")
.SetProjection(Projections.Property("uc.id"))
));
var unassignedCategories = crit.List<Category>();
希望这有帮助,很抱歉我无法测试:)
托宾假设一个类别只能由一个用户拥有是否安全?假设Category表在数据库级别具有用户表的外键是否安全?类别仅由一个用户拥有,并且Category表包含用户的外键。
select c.* from categories where c.id not in (select uc.id from usercategories)