我在我的数据库中的表粗略地看是这样的:

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查询来选择所述不同的组名,并且另一个定制查询来选择适当的一组包含的项的?

有帮助吗?

解决方案

我不认为这是可能做到你想要什么纯粹的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