如何 - 简单的Nhibernate加入

时间:2009-08-07 15:44:10

标签: nhibernate

我如何使用hbm或流利的方式进行简单的连接,所以我有这样的课程?

public class Pet
{
    public Pet() {}

    public virtual int PetId { get; set; }
    public virtual int PetTypeId { get; set; }
    public virtual string Name { get; set; }
}

CREATE TABLE [dbo].[test_PetTypes](
    [PetTypeId] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nchar](10) NOT NULL
) ON [PRIMARY]

CREATE TABLE [dbo].[test_Pet](
    [PetId] [int] IDENTITY(1,1) NOT NULL,
    [PetType] [int] NOT NULL
) ON [PRIMARY]

SELECT     dbo.test_Pet.*, dbo.test_PetTypes.Name
FROM         dbo.test_Pet INNER JOIN
                      dbo.test_PetTypes ON dbo.test_Pet.PetType = dbo.test_PetTypes.PetTypeId

1 个答案:

答案 0 :(得分:1)

这种情况需要一个具有从test_PetTypetest_Pet的一对多映射的集合。你不应该在你的类上需要ID字段,除非你特别想手动操作它们(NHibernate应该为你处理它)。来自Ayende(NHibernate贡献者之一)here的帖子很棒。

我认为您的HBM的基本要点(改编自Ayende的帖子)应与此类似:

<set name="Pets" table="test_PetTypes">
    <key column="PetId"/>
    <one-to-many class="Pet"/>
</set>

我目前没有测试这个功能的设施,所以我无法验证该方案。例如,您可以在没有<set />标记的情况下离开,而是将映射添加到更高级别。