导航属性的多对一问题

时间:2013-12-03 09:59:20

标签: breeze

我在微风中遇到多对一关系的问题。

情况如下(为清晰起见,替换了实体类型):

有一个包含子实体列表的父实体,每个子实体都有另一个子实体列表。

父母 - 孩子 - 孙子

父母实体可以是教室(虚拟情境),孩子可以是学生。让我们说每个学生都有一个附属于他们的另一个实体的清单,例如每个孩子可以有一个以上的国籍,国籍是孙子对象。

所以在子实体中有一个如下所示的导航属性: 国籍:{entityTypeName:"国家:#Some.Namespace",isScalar:false,associationName:" Pupil_Countries" }

在国家/地区,您不希望链接回到Pupil,因为没有理由从国家/地区导航到学生。

当尝试将国家/地区添加到民族阵列时,没有任何反应,因为" checkForDups"方法什么都不返回(我没有双向绑定,也没有设置外键属性)。

我怎样才能让它发挥作用?

非常感谢!

编辑:

事情不起作用:

  1. pupil.countries.push(国家)
  2. 当我有反向关系时,上面的调用在将pupil上的isScalar属性设置为true时起作用,但由于这个原因,它无法将同一个国家/地区分配给2个学生。
  3. (注意样品是假的,仅供样品使用)

1 个答案:

答案 0 :(得分:1)

你试图以错误的方式做多对多的关系。

你们有很多学生,每个学生都有很多国籍(国家)。您有许多国籍(国家)与许多学生有关。就这么简单。

你需要做的是建立一个Junction对象:

public class PupilNationalityJunction{
  public int Id{get;set;}
  public int PupilId{get;set;}
  public int NationalityId{get;set;}
  [ForeignKey("PupilId")]
  public Pupil Pupil{get;set;}
  [ForeignKey("NationalityId")]
  public Country Nationality{get;set;}
}

然后您可以查询:classroom.pupils.pupilNationalityJunctions.Nationality 虽然拥有超过1个国籍可能没有意义,但这仅仅是例如。