Студопедия

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

КАТЕГОРИИ:

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






Связь многие ко многим






Для связи многие ко многим выберем объекты «Преподаватель» и «Предмет». Один преподаватель может вести много предметов и один предмет может вести несколько преподавателей.

Создадим классы домены для преподавателя и для предмета:

 

namespace Fluent.Domain

{

//Класс домена предмета

public class Subject

{

private IList< Teacher> teacherList = new List< Teacher> ();

 

public virtual long Id { get; set; }

 

public virtual string SubjectName { get; set; }

 

public virtual int HoursNumber { get; set; }

 

public virtual IList< Teacher> TeacherList

{

get { return teacherList; }

set { teacherList = value; }

}

}

}

 

namespace Fluent.Domain

{

//Класс домена преподавателя

public class Teacher

{

private IList< Subject> subjectList = new List< Subject> ();

 

public virtual long Id { get; set; }

 

public virtual string FirstName { get; set; }

 

public virtual string LastName { get; set; }

 

public virtual IList< Subject> SubjectList

{

get { return subjectList; }

set { subjectList = value; }

}

}

}

 

Обратите внимание, что класс предмета содержит коллекцию для хранения преподавателей, а класс преподавателей содержит коллекцию для хранения предметов.

Создадим классы отображения для предмета и преподавателя:

 

namespace Fluent.Mappings

{

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

public class SubjectMap: ClassMap< Subject>

{

public SubjectMap()

{

Table(" Subjects");

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

Map(x => x.SubjectName);

Map(x => x.HoursNumber);

//Связь многие ко многим

HasManyToMany(x => x.TeacherList)

.Table(" TeacherSubject")

.ParentKeyColumn(" SubjectId")

.ChildKeyColumn(" TeacherId");

}

}

}

 

namespace Fluent.Mappings

{

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

public class TeacherMap: ClassMap< Teacher>

{

public TeacherMap()

{

Table(" Teachers");

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

Map(x => x.FirstName);

Map(x => x.LastName);

//Связь многие ко многим

HasManyToMany(x => x.SubjectList)

.Table(" TeacherSubject")

.ParentKeyColumn(" TeacherId")

.ChildKeyColumn(" SubjectId");

}

}

}

 

Обратите внимание, что в классах отображениях с обеих сторон указывается конструкция HasManyToMany

Поскольку связь многие ко многим в реляционных базах данных осуществляется через отдельную таблицу, то в базе данных будет автоматически создано три таблицы, которые представлены на рисунках 4.5, 4.6 и 4.7.

Рисунок 4.5 – Таблица предмета

Рисунок 4.6 – Таблица преподавателя

Рисунок 4.7 – Промежуточная таблица преподавателя и предмета

Более детально со связями между объектами, а также с параметрами связей можно ознакомиться в книгах NHibernate in Action и NHibernate Cookbook.


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.008 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал