0

データベースに次のようなテーブルがあります。

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のドキュメントを検索しようとしましたが、何を探すべきか本当にわかりません。検索クエリのアイデアをいただければ幸いです。

FooGroupたぶん、カスタムHQL / SQLクエリを使用して個別のグループ名を選択し、別のカスタムクエリを使用して含まれているアイテムの適切なセットを選択するためのマッピングを作成できますか?

4

1 に答える 1

0

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行以上)を処理している場合にのみ、パフォーマンスの問題が発生すると思います。

于 2009-09-03T00:51:43.623 に答える