Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы Java и C# технологии.doc
Скачиваний:
171
Добавлен:
01.03.2016
Размер:
3.04 Mб
Скачать
        1. Связь один ко многим

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

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

namespace Fluent.Domain

{

//Домен группы

public class Group

{

private IList<Student> studentList = new List<Student>();

public virtual long Id { get; set; }

public virtual string GroupName { get; set; }

public virtual string CuratorName { get; set; }

public virtual string HeadmanName { get; set; }

public virtual IList<Student> StudentList

{

get { return studentList; }

set { studentList = value; }

}

}

}

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 Group Group { get; set; }

}

}

Обратите внимание, что со стороны группы содержится список для хранения студентов.

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

using System;

using System.Collections.Generic;

using FluentNHibernate.Mapping;

using Fluent.Domain;

namespace Fluent.Mappings

{

//Класс отображения группы

public class GroupMap:ClassMap<Group>

{

public GroupMap()

{

Table("Groups");

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

Map(x => x.GroupName);

Map(x => x.CuratorName);

Map(x => x.HeadmanName);

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

HasMany(x => x.StudentList)

.KeyColumns.Add("GroupId")

.Inverse()

.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);

//Ссылка на руппу

References(x => x.Group).Column("GroupId").Cascade.All();

}

}

}

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

HasMany(x => x.StudentList)

.KeyColumns.Add("GroupId")

.Inverse()

.Cascade.All();

А со стор многие, как и в связи один к одному находится конструкция:

References(x => x.Group).Column("GroupId").Cascade.All();

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

Рисунок 4.3 – Таблица группы

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

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