2015-06-05 3 views
0

Я использую FluentNhibernate для моего приложения C#, я хотел бы знать, как присоединиться к трем таблицам, которые не имеют внешних ключей. Давайте предположим, у меня есть следующую структуру таблицы,Как присоединиться к трем таблицам с использованием FluentNhibernate

Student [StudentID, NAME1 NAME2, ClassID]

Класс [ClassID, Имя, SchoolID]

школа [SchoolID, SchoolName]

мне нужно присоединиться к выше трех таблиц, как это

SELECT a.Name1,a.Name2,b.Name,c.SchoolName FROM Student a, Class b, School c WHERE a.ClassID = b.ClassID AND b.SchoolID = c.SchoolID 

Я имею следующую структуру класса для ORM

public class Student 
{ 
     public virtual int  StudentID { get; set; } 
     public virtual string Name1 { get; set; } 
     public virtual string Name2 { get; set; } 
     public virtual int  ClassID { get; set; } 
} 



public class StudentMap : ClassMap<Student> 
    { 
     public StudentMap() 
     { 
      Id(x => x.StudentID).Column("student_id"); 
      Map(x => x.Name1).Column("name_1"); 
      Map(x => x.Name1).Column("name_2"); 
      Map(x => x.ClassID).Column("class_Id"); 
      Table("student"); 
     } 
    } 





public class Classt 
{ 
     public virtual int  ClassID { get; set; } 
     public virtual string Name { get; set; } 
     public virtual int  SchoolID { get; set; } 
} 



public class ClassMap : ClassMap<Class> 
    { 
     public ClassMap() 
     { 
      Id(x => x.ClassID).Column("class_id"); 
      Map(x => x.Name).Column("name"); 
      Map(x => x.SchoolID).Column("school_Id"); 
      Table("class"); 
     } 
    } 




public class School 
{ 
     public virtual int  SchooID { get; set; } 
     public virtual string Name { get; set; } 
} 



public class SchoolMap : ClassMap<School> 
    { 
     public SchoolMap() 
     { 
      Id(x => x.ClassID).Column("class_id"); 
      Map(x => x.Name).Column("name"); 
      Table("school"); 
     } 
    } 
+0

Почему у вас нет реальности между вашими сущностями? зачем использовать ORM, если не будет использовать какое-либо отношение между объектами. – Mert

ответ

0

Вы должны пойти что-то вроде этого;

public class Student 
{ 
     public virtual int  StudentID { get; set; } 
     public virtual string Name1 { get; set; } 
     public virtual string Name2 { get; set; } 
     public virtual List<Class> ClassList { get; set; } 
} 

public class StudentMap : ClassMap<Student> 
{ 
    public StudentMap() 
    { 
     Id(x => x.StudentID).Column("student_id"); 
     Map(x => x.Name1).Column("name_1"); 
     Map(x => x.Name1).Column("name_2"); 
     HasMany(x => x.Class).KeyColumn("ClassId") 
     Table("student"); 
    } 
} 

public class Class 
{ 
     public virtual int  ClassID { get; set; } 
     public virtual string Name { get; set; } 
     public virtual IList<Student> StudentList { get; set; } 
     public virtual School School { get; set; } 
} 

public class ClassMap : ClassMap<Class> 
{ 
    public ClassMap() 
    { 
     Id(x => x.ClassID).Column("class_id"); 
     Map(x => x.Name).Column("name"); 
     HasMany(x => x.Student).KeyColumn("StudentId") 
     References(x => x.School) 
     Table("class"); 
    } 
} 

public class School 
{ 
    public virtual int  SchoolID { get; set; } 
    public virtual string Name { get; set; } 
    public virtual IList<Class> ClassList { get; set; } 
} 

public class SchoolMap : ClassMap<School> 
{ 
    public SchoolMap() 
    { 
     Id(x => x.SchoolID).Column("SchoolId"); 
     Map(x => x.Name).Column("name"); 
     HasMany(x => x.ClassList).KeyColumn("ClassId") 
     Table("school"); 
    } 
} 
+0

Спасибо за ответ Mert и как выглядит запрос? – Praveen

+0

Что вы пытаетесь достичь, nhibernate работает с объектами. каков ваш возвращающийся объект? – Mert

+0

Я имею в виду, если я хочу получить конкретный объект-ученик, я получаю как этот 'code'var user = session.CreateCriteria (« st »). Добавить (Restrictions.Eq (« st.StudentId », login)). UniqueResult (); 'code'. Как я могу выполнить ниже соединение в FluentNhibernate с предложенной файловой структурой' code'SELECT a.Name1, a.Name2, b.Name, c.SchoolName FROM Student a, класс b, школа c WHERE a.ClassID = b.ClassID И b.SchoolID = c.SchoolID 'code' – Praveen

 Смежные вопросы

  • Нет связанных вопросов^_^