2009-08-07 8 views
0

hbmまたは流暢にこの簡単な結合を行う方法は私はこのようなクラスがありますか?How To - シンプルなNhibernateの参加

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

この状況はtest_PetTypeからtest_Petへの1対多マッピングとセットのために呼び出します。特別に手作業で操作する必要がある場合を除いて、クラスにIDフィールドは必要ありません(NHibernateがそれを処理する必要があります)。 Ayende(NHibernateの投稿者の1人)からの素晴らしい投稿がhereです。

私は(Ayendeのポストから適応)あなたのHBMの基本的な要旨はこれに類似すべきだと思います。

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

私は、現時点ではこれをテストするための設備を持っていないので、私ができます」シナリオを検証します。 <set />タグを使用せずに離れて、代わりに上位のレベルでマッピングを追加することができます。