使用Fluent 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);
    }
}
我的数据库有两个表\'task \'和\'user \'
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
我要执行的操作是运行一个查询,该查询返回仅具有\'Tasks \'集合中处于活动状态的任务的特定用户
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对象,而我得到的是同一个任务对象的3个副本(task.Id = 3),所有这些对象都包含所有5个Tasks他们各自的收藏。 我实际上是想做些什么,还是应该只在Task实体上查询? 我希望不是这样,因为能够看到用户的活动任务而不必费心手动过滤就好了。     

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)