2009-08-25 13 views
0

私は2つのテーブルEmployeeとEmployeeGroupsというテーブルを次のように使っています。私は以下の無関係の列の大部分を除外しました。私は外来キーの関係をマップするのに苦労しています。従業員表のすべてのEmployeeIdがEmployeeGroups表に存在するわけではない1対1の関係です。私は下のマッピングファイルでEmployeeId関係をセットアップする方法を知りたいですか?これまでNHibernateとの関係をマップするのに苦労します

CREATE TABLE [dbo].[Employees](
[EmployeeId] [int] IDENTITY(1,1) NOT NULL, 
[ForeName] [nvarchar](20) COLLATE Latin1_General_CI_AI NOT NULL, 
[SurName] [nvarchar](20) COLLATE Latin1_General_CI_AI NOT NULL, 

CONSTRAINT [PK_Employees_1] PRIMARY KEY CLUSTERED 
(
    [EmployeeId] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] 

EmployeeGroups

CREATE TABLE [dbo].[EmployeeGroups](
[GroupId] [int] NULL, 
[EmployeeId] [int] NOT NULL, 
[Active] [int] NULL, 
CONSTRAINT [PK_EmployeeGroups] PRIMARY KEY CLUSTERED 
(
    [EmployeeId] ASC 
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] 

USE [DemoDEV] 
GO 
ALTER TABLE [dbo].[EmployeeGroups] WITH CHECK ADD CONSTRAINT  
[FK_EmployeeGroups_Employees] FOREIGN KEY([EmployeeId]) 
REFERENCES [dbo].[Employees] ([EmployeeId]) 

私の従業員マッピングファイル

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
<class name="AdaptiveMaintenance.Core.Domain.Employee, AdaptiveMaintenance.Core" table="Employees" lazy="false"> 
    <id name="ID" column="EmployeeId"> 
     <generator class="assigned" /> 
    </id> 
    <property name="Forename" column="ForeName" not-null="true"/> 
    <property name="Surname" column="SurName" not-null="true"/> 

</class> 
</hibernate-mapping> 

マイEmployeeGroupsマッピングファイルは、これまでのところ、この

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="AdaptiveMaintenance.Core.Domain.EmployeeGroup, AdaptiveMaintenance.Core" table="EmployeeGroups" lazy="false"> 
     <id name="ID" column="EmployeeId"> 
     <generator class="foreign" /> 
    </id> 

    <property name="Active" column="Active" /> 
</class> 
のように見えます

従業員

答えて

0

dbモデルのマッピング方法だけでなく、クラスモデルについて考える必要があります。どのように見えるのですか?

これにより、EmployeeGroupからEmployeeへの参照が作成されます。

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="AdaptiveMaintenance.Core.Domain.EmployeeGroup, AdaptiveMaintenance.Core" table="EmployeeGroups" lazy="false"> 
    <id name="ID" column="GroupId"> 
     <generator class="assigned" /> 
    </id> 

    <property name="Active" column="Active" /> 
    <many-to-one name="Employee" class="Employee" column="EmployeeId"/> 
</class> 

1対1の関係でプライマリキーを結合しようとすると、GroupIdはなぜ存在するのですか?私はそれを独立した主キーにしました。

ところで、新しいデータベースモデルを作成する場合は、最初にクラスを設計し、後でマップし、SchemaExportを使用してスキーマを作成する方が簡単です。