NHibernateはで「グループ名」欄からグループエンティティクラスをマッピングする方法?

StackOverflow https://stackoverflow.com/questions/1367355

質問

私はおおよそ次のように見ている私のデータベース内のテーブルを持っています:

create table Foo (
    Id             int identity       not null,
    Name           varchar(100)       not null,
    GroupName      varchar(100)       not null,
    constraint PK_Foo primary key (Id)
)

今、私はこのような2つのエンティティクラスにこのテーブルをマッピングする:

class Foo {
    public virtual in Id { get; private set; }
    public virtual string Name { get; set; }
    public virtual Group Group { get; set; }
}

class FooGroup {
    public virtual string Name { get; set; }
    public virtual ISet<Foo> Foos { get; private set; }
}

これはNHibernateのでは可能ですか?私はネットとNHのドキュメントを検索しようとしましたが、私は本当に何を探すべきか分からない - 。検索クエリのためのアイデアをいただければ幸いです。

たぶん私は含まれているアイテムの適切なセットを選択するために、別々のグループ名を選択するためのカスタムHQL / SQLクエリを使用していますFooGroupのマッピング、および他のカスタムクエリを行うことができますか?

役に立ちましたか?

解決

私はそれはあなたがNHibernateのマッピングで純粋にやりたいことができないと思う...私は他の誰かが間違って証明することができるが: - )

OTOH、それはにあなたのテーブルからの直接的なマッピングを定義するために非常に簡単です

class RawFooData 
{
    public virtual in Id { get; private set; }
    public virtual string Name { get; set; }
    public virtual string GroupName { get; set; }
}

、その後、必要な値を出すために、これを処理します:

IEnumerable<FooGroup> groups = allRawFooData.Select(data => data.GroupName)
                                        .Distinct()
                                        .Select(name => new FooGroup() 
                                                        {
                                                           Name = name
                                                        });

foreach(var group in groups)
{
    group.Foos = allRawFooData.Where(data => data.GroupName == group.Name);
}

私はあなたのデータの非常に大量(例えば10K行以上)を扱っている場合は、ここでしかパフォーマンスの問題を見つけることになると思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top