3

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

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

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; }
}

测试数据(1 张票,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>();

我有以下结果

在此处输入图像描述

4

1 回答 1

4

当您站立时,您将在加入one-to-many表格时返回笛卡尔积,在您的情况下为 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....
}
于 2013-02-01T16:57:51.567 回答