2009-08-25 5 views
0

Я работаю с 2 таблицами, сотрудниками и таблицей EmployeeGroups следующим образом. Я не упомянул большинство неоригинальных столбцов ниже. Я изо всех сил пытаюсь сопоставить отношения внешних ключей. Это взаимно однозначное отношение, в котором не каждая таблица EmployeeId в таблице Employees будет существовать в таблице EmployeeGroups. Мне интересно, как настроить отношения 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> 

Если у вас есть отношение «один к одному», попробуйте связать первичный ключ, почему существует GroupId? Я сделал его независимым первичным ключом.

BTW, если вы создаете новую модель базы данных, проще сначала создать классы, затем нанести их карту и создать схему с помощью SchemaExport.

Смежные вопросы