1

我有点困惑如何在本地创建的对象中正确处理多对多关系。我准备了一个小例子来演示这个问题。

有两张表和一张映射表: 数据库结构

和表格中的数据:

数据库数据

实体框架创建了两个表和多对多关系:

英孚

现在运行应用程序并加载单个学生(ID=1 和他的教室)。如果学生是从数据库中加载的,那么一切都很好,EF 有 2 个教室:

在此处输入图像描述

但是,如果用户是在本地创建的(具有相同的 Id 但更改了名称)并附加到 EF,则不会加载教室(studentLocal变量)。

如果我尝试从 EF 加载学生,同样的情况 - 它获取本地用户(student变量 has Name="xx")并且没有教室:

在此处输入图像描述

在视图中,用户可以更改学生的教室以及更改学生属性,因此我需要更新学生表并合并 StudentClassroom 表。

  1. 在这种情况下,最好的处理方式是什么?我不想一次又一次地加载每个回发学生实体。
  2. 有没有办法为数据库中存在的本地创建的学生加载教室?
  3. 如何合并 StudentClassroom 记录?我只知道一个-加载现有记录和新记录并合并,然后删除所有记录并从新列表中重新创建,或者手动确定应该删除/更新/创建哪些记录。有更好的方法吗?
4

1 回答 1

0

您的问题是 EF 没有为您的模型创建正确的表。它应该创建 3 个类而不是 2 个。可能不是因为您没有在数据库中正确设置关系。如果您使用 SQL Server,请尝试使用图表功能检查您的关系,并且在设置模型之前正确设置主键。

于 2013-05-29T04:01:10.440 回答