Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Связь один к одному






Для связи один к одному возьмем объекты «Студент» и «Зачетная книжка» - один студент может иметь только одну зачетную книжку. Для начала создадим классы студента и зачетной книжки:

 

namespace Fluent.Domain

{

//Домен студента

public class Student

{

public virtual long Id { get; set; }

 

public virtual string FirstName { get; set; }

 

public virtual string LastName { get; set; }

 

public virtual char Sex { get; set; }

 

public virtual int Year { get; set; }

 

//Ссылка на зачетную книжку

public virtual RecordBook RecordBook { get; set; }

 

}

}

 

namespace Fluent.Domain

{

//Домен зачетной книжки

public class RecordBook

{

public virtual long Id { get; set; }

 

public virtual string Number { get; set; }

 

//Ссылка на студента

public virtual Student Student { get; set; }

}

}

 

Теперь необходимо создать классы отображения (map-классы):

 

namespace Fluent.Mappings

{

//Класс отображения зачетной книжки

public class RecordBookMap: ClassMap< RecordBook>

{

public RecordBookMap()

{

//Указание имени таблицы для зачетной книжки

Table(" RecordBooks");

//Отображение идентификатора на колонку таблицы

Id(x => x.Id).GeneratedBy.Native();

//Отображение обычного поля на колонку таблицы

Map(x => x.Number);

//Ссылка на студента

References(x => x.Student).Column(" StudentId").Cascade.All();

}

}

}

 

namespace Fluent.Mappings

{

//Класс отображения студента

public class StudentMap: ClassMap< Student>

{

public StudentMap()

{

//Указание имени таблицы для студента

Table(" Students");

Id(x => x.Id).GeneratedBy.Native();

Map(x => x.FirstName);

Map(x => x.LastName);

Map(x => x.Sex);

Map(x => x.Year);

//Связь один к одному

HasOne(x => x.RecordBook).ForeignKey(" StudentId").Cascade.All();

}

}

}

 

Как видно из примера, каждый класс отображения содержит конструкцию для указания имени таблицы в базе данных (Table), конструкцию для отображения ключевого поля на таблицу базы данных (Id), конструкции для отображения информационных полей на таблицу базы данных (Map), конструкции для связывания объектов. В данном примере, для того чтобы связать объекты «Студент» и «Зачетная книжка» связью один к одному в классе студента необходима ссылка на объект «Зачетная книжка»:

 

public virtual RecordBook RecordBook { get; set; }

 

В классе зачетной книжки для того, чтобы с объекта зачетной книжки можно было получить доступ к студенту, в классе зачетной книжки необходима ссылка на объект «Студент»:

 

public virtual Student Student { get; set; }

 

В классах отображения тоже должны быть соответствующие поля. Со стороны студента:

 

HasOne(x => x.RecordBook).ForeignKey(" StudentId").Cascade.All();

 

Со стороны зачетной книжки должно быть поле:

 

References(x => x.Student).Column(" StudentId").Cascade.All();

 

В соответствии с классами отображения в базе данных автоматически создаются таблицы, изображенные на рисунке 4.1 и 4.2.

Рисунок 4.1 – Таблица зачетной книжки

Рисунок 4.2 – Таблица студента

Рассмотрим теперь связь один ко многим.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.