Изо всех сил пытается наметить отношения с NHibernate - PullRequest
0 голосов
/ 25 августа 2009

Я работаю с двумя таблицами EmployeGe и таблицей EmployeeGroups следующим образом. Я опустил большинство ненужных столбцов ниже. Я изо всех сил пытаюсь отобразить отношения внешнего ключа. Это отношение один-к-одному, когда не каждый EmployeeId в таблице Employees будет существовать в таблице EmployeeGroups. Мне интересно, как настроить отношение EmployeeId в моих файлах сопоставления ниже?

Сотрудники

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>

1 Ответ

0 голосов
/ 25 августа 2009

Вы должны не только подумать о том, как отобразить модель БД, вы должны всегда думать о модели класса: как она должна выглядеть?

При этом создается ссылка из 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? Я сделал его независимым первичным ключом.

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

...