具有连接(或获取)的 Nhibernate 查询返回重复项

标签 nhibernate fluent-nhibernate queryover

我遇到了意外行为,我不清楚。当然我可以使用不同的,但这是什么原因呢?

我有实体(流畅的自动映射):

public class Ticket
{
    public virtual int Id { get; set; }
    public virtual string Title { get; set; }
    public virtual IList<Activity> Activities { get; set; }
}

public class Activity
{
    public virtual int Id { get; set; }
    public virtual string Title { get; set; }
    public virtual Ticket Ticket { get; set; }
}

测试数据(一张票有5个事件):

new Ticket { Id = 1, Activities = new List<Activity>
    {
        new Activity(), new Activity(), new Activity(), new Activity()
    };

查询:

var report = GetSessionFactory()
    .OpenSession()
    .QueryOver<Ticket>()
    .JoinAlias(ticket => ticket.Activities, () => activity)
    .List<Ticket>();

我得到了以下结果:

enter image description here

最佳答案

当您加入一对多表时,您返回的是笛卡尔积,在您的例子中是 1 x 5 行。所以如果你想走这条路,那么你需要添加 .TransformUsing(Transformers.DistinctRootEntity)

您确定不想加载事件并使用延迟加载的优势来检索事件吗?在大多数情况下,这可能是更有效的方法。

有点像:-

var ticket = session.QueryOver<Ticket>.Where(w => w.Id == id).SingleOrDefault();
OR
var ticket = session.Get<Ticket>(1);

然后你可以简单地调用

foreach(var activity in  ticket.Activities)
{
 // do something here....
}

关于具有连接(或获取)的 Nhibernate 查询返回重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14651071/

相关文章:

c# - LocalSessionFactoryObject - 映射资源 - hbm 文件的路径

nhibernate - Fluent NHibernate - 将单个表的部分映射到具有几个共享字段的多个类

.net - 流利的 NHibernate : What is AutoImport?

nhibernate - 我可以防止 as HasOne 映射导致数据库调用吗?

nhibernate - nHibernate 中的复杂投影入门

c# - NHibernate QueryOver 选择只需要的模型

nhibernate - SQLite 中针对 NHibernate 的 ReadUncommitted 中断

nhibernate - 查询开始于

c# - QueryOver 查找别名字符串

c# - 使用 Or 运算符而不是 And 将两个子查询添加到查询中?