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

テストデータ(5 つのアクティビティを含む 1 つのチケット):

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 に答える