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)
)

现在我想将此表映射到两个实体类,如下所示:

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 回答