Свободное владение Nhibernate: проблема картографии - PullRequest
0 голосов
/ 10 марта 2011

Я очень плохо знаком с Fluent Nhibernate. Я застрял в одной ситуации. Пожалуйста, найдите ниже детали об этом.

Наша структура таблицы похожа на

Стол Ученик {Student_Id, Name}
Столовая школа {School_Id, Name}
Таблица LinkTable {School_Id, Student_Id}

LinkTable содержит только идентификатор ученика и школы. [Составной ключ]

Отношение как 1) Один ученик может быть частью 0 или 1 школы. 2) В одной школе может быть много учеников.

Может кто-нибудь сообщить мне, как будет выполняться сопоставление для каждого файла?

или сообщите mw, что не так в следующих файлах сопоставления

В настоящее время я ошибаюсь, что объект Student Student не найден в SchoolStudent.

  public Student()
{
    Id(x => x.Id);
    Map(x => x.Name);
    HasOne(x => x.SchoolStudent).PropertyRef(r => r.Student);
}

public School()
{
    Id(x => x.Id);
    Map(x => x.Name);
    HasMany(x => x.SchoolStudent).KeyColumn("School_Id").Inverse().Cascade.AllDeleteOrphan();
}

public SchoolStudent()
{
    CompositeId().KeyReference(x => x.School, "School_Id")
            .KeyReference(x => x.Student, "Student_Id");
}

Спасибо, Махеш

Ответы [ 2 ]

1 голос
/ 15 марта 2011

Если ученик может быть связан только с 0 или 1 школой, вы можете отказаться от использования LinkTable и класса SchoolStudent и просто добавить School_Id в таблицу Student и ссылку на School в классе Student.

Тогда ваши отображения будут такими:

public Student()
{
    Id(x => x.Id);
    Map(x => x.Name);
    References(x => x.School);
}

public School()
{
    Id(x => x.Id);
    Map(x => x.Name);
    HasMany(x => x.Student).Inverse().Cascade.AllDeleteOrphan();
}
1 голос
/ 15 марта 2011

Я бы переписал это примерно так:

Student.cs

public class Student 
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual IList<School> Schools { get; set; }

    public Student() 
    {
        Schools = new List<School>();
    }
}

School.cs

public class School 
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual IList<Student> Students { get; set; }

    public School() 
    {
        Students = new List<Student>();
    }
}

StudentMap.cs

public class StudentMap : ClassMap<Student>
{
    public Student()
    {
        Id(x => x.Id    , "Student_Id");
        Map(x => x.Name , "Name");

        HasManyToMany(x => x.Schools).Table("LinkTable")
                                     .ParentKeyColumn("Student_Id")
                                     .ChildKeyColumn("School_Id");
    }
}

SchoolMap.cs

public class SchoolMap: ClassMap<School>
{
    public School()
    {
        Id(x => x.Id    , "School_Id");
        Map(x => x.Name , "Name");

        HasManyToMany(x => x.Students).Table("LinkTable")
                                      .ParentKeyColumn("School_Id")
                                      .ChildKeyColumn("Student_Id");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...