2011-03-10 47 views
0

我對Fluent Nhibernate非常陌生。我陷入了這種情況。 請查閱下面的細節。Fluent Nhibernate:Mapping問題

我們的表結構是這樣的

表學生{student_id數據,名稱}
表學校{學校ID,名稱}
表LinkTable {學校ID,student_id數據}

LinkTable只包含學生和學校的ID。 [複合鍵]

關係就像 1)一個學生可以是0或1學校的一部分。 2)一所學校可以包含很多學生。

任何人都可以讓我知道如何爲每個文件做映射嗎?

或讓兆瓦知道什麼現在是錯誤的下面的映射文件

,它給我的錯誤是學生物業不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"); 
} 

感謝, 馬赫什

回答

1

我將它重新寫這樣的事:

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"); 
    } 
} 
+0

適合飼養許多對許多鏈接表。我質疑是否需要。如前所述,一個學生只能有一所學校或沒有多少學校。 – 2011-03-15 01:43:21

+0

我想我對LinkTable表格感到困惑,該表格允許一個學生擁有很多學校(儘管如此,很難想象這一點)。 – 2011-03-15 21:38:03

1

如果一個學生只能有0或1所學校有關,那麼你可以考慮刪除的LinkTable和SchoolStudent班級,只需將School_Id添加到學生表,並參考學生班的學校。

然後你的映射是這樣的:

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(); 
}