请原谅我的无知属性Flitering对象子集,我是新来NHibernate和我有一个概念性的问题试图与NHibernate的查询过滤的子集使用功能NHibernate
我的对象模型包含两个实体:用户和任务设置这样
public class User
{
public User()
{
this.Tasks = new List<Task>();
}
public User(int id): this()
{
this.Id = id;
}
public virtual int Id { get; private set; }
public virtual IList<Task> Tasks { get; set; }
}
public class Task
{
public Task() { }
public Task(int id, bool active): this()
{
this.Id = id;
this.Active = active;
}
public virtual int Id { get; set; }
public virtual bool Active { get; set; }
}
我NHibernate的映射现报告如下
public class UserMap: ClassMap<User>
{
public UserMap()
{
Table("user");
Id(x => x.Id);
HasMany(x => x.Tasks);
}
}
public class TaskMap : ClassMap<Task>
{
public TaskMap()
{
Table("task");
Id(x => x.Id);
Map(x => x.Active);
}
}
我的数据库中具有T WO表“任务”和我所正是如此充满
SELECT * FROM task;
+----+--------+---------+
| Id | Active | User_id |
+----+--------+---------+
| 1 | 1 | 3 |
| 2 | 1 | 3 |
| 3 | 1 | 3 |
| 4 | 0 | 3 |
| 5 | 0 | 3 |
| 6 | 1 | 1 |
| 7 | 1 | 1 |
| 8 | 1 | 1 |
| 9 | 0 | 1 |
| 10 | 0 | 1 |
+----+--------+---------+
10 rows in set
SELECT * FROM user;
+----+
| Id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+----+
5 rows in set
“用户”什么,我试图做的是运行返回一个特定的用户只用它的“任务”收集
在活动任务查询var query = QueryOver.Of<User>()
.Where(u => u.Id == 3)
.JoinQueryOver<Task>(x => x.Tasks)
.Where(t => t.Active == true);
var results = dataProvider.ExcecuteQuery<User>(query);
当我执行此查询时,我期望在其Tasks集合中取回带有3个Task对象的单个用户对象,而我得到的是相同任务对象(task.Id = 3)的3个副本,所有这些对象都有所有5个任务在他们各自的集合中。
是我正在尝试做的事实上可能或者我应该只是查询任务实体呢?
我希望事实并非如此,因为只要能够看到用户的活动任务而不必乱搞手动过滤就好了。
这个问题的http://计算器。 com/questions/5790153/nhibernate-filtering-out-results-based-child-property看起来表面上相似,但我似乎看不到我能够理解的问题的答案 – Willbill 2011-05-26 14:28:58