NHibernate似乎多次返回第一行的内容。与数据库中实际不同的行数一样多。例如,如果一个人有3点校区的隶属关系是这样的:NHibernate返回重复行
贝克学院 - 教师
科比小学 - 教师
俄亥俄州立大学 - 学生
NHibernate的将返回这样的:
贝克学院 - 教师
贝克学院 - 教师
贝克学院 - 教师
我USI ng FluentNHibernate。下面是实体和映射文件的一些片段:
public class Person
{
public virtual string SysID { get; set; }
public virtual string FullName { get; set; }
public virtual ICollection<Campus> Campuses { get; set; }
}
public class Campus
{
public virtual string SysID { get; set; }
public virtual string Name { get; set; }
public virtual string Affiliation { get; set; }
}
public class PersonMapping
{
Table("Person");
Id(x => x.SysId);
Map(x => x.FullName).Column("FULL_NAME");
HasMany(x => x.Campuses).KeyColumn("SysId");
}
public class CampusMapping
{
Table("Campus");
Id(x => x.SysID);
Map(x => x.Name);
Map(x => x.Affiliation);
}
我通过校园迭代在我看来(MVC 3)所示:
@foreach(var campus in Model.Campuses)
{
@campus.Name @campus.Affiliation
}
我也尝试添加该到实体以确保它不是一个愚蠢的错误与MVC或剃刀和有同样的结果:
public virtual string campusesToString
{
get
{
string s = "";
for (int i = 0; i < Campuses.Count; i++)
{
s = s + Campuses.ElementAt(i).Name + " ";
}
return s;
}
}
最后,我查了一下,目前正在输出的SQL,这是正确的,它的返回所有行联合国不过...
+1我同意,我也觉得映射需要一个多到多映射,否则每个校区只能有一个人(因为它看起来现在的外键列将在最终即使给出了一个与主键列不冲突的名字,校园表也是如此) – Yhrn 2011-02-23 16:04:26
是的,那也是我的想法。我会将其添加到答案中。 – 2011-02-23 16:07:14
这是校园关系。所以,在db中,它有一个识别人的sysid,一个识别人与校园的关系的领域,以及校园的名字。 (我没有设计它)。 – 2011-02-23 16:20:46