Fluent NHibernate , : HasOne, HasMany, HasManyToMany.
.
- . :
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
.
. . .
:
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
. .
:
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.