我遇到了意外行为,我不清楚。当然我可以使用不同的,但这是什么原因呢?
我有实体(流畅的自动映射):
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>();
我得到了以下结果:
最佳答案
当您加入一对多
表时,您返回的是笛卡尔积,在您的例子中是 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/