我对Fluent Nhibernate非常陌生。我陷入了这种情况。 有关它的详细信息,请参阅。
我们的表结构就像
表学生{Student_Id,姓名}
表学校{School_Id,Name}
表LinkTable {School_Id,Student_Id}
LinkTable仅包含学生和学校的ID。 [复合键]
关系就像 1)一名学生可以成为0或1所学校的一部分。 2)一所学校可以容纳许多学生。
任何人都可以告诉我如何为每个文件进行映射吗?
或者让mw知道以下映射文件有什么问题
现在,它给我一个错误,即在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");
}
谢谢, 马赫什
答案 0 :(得分: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");
}
}
答案 1 :(得分:1)
如果学生只能与0或1所学校相关联,那么您可以考虑删除LinkTable和SchoolStudent课程,只需将School_Id添加到Student表中,并在Student课程中添加对School的引用。
然后你的映射就像:
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();
}