1

我的数据库中的两个表之间存在多对多关系,因此在我的 edmx 模型中我只有两个表,没有中间表。此表是电影和流派。

当我搜索一些电影时,我也得到了相关的实体,所以通过预先加载,我填充了我的实体电影的集合流派。是我想要的。

问题是,当结果中有多个电影时,实体 MOvies 的集合 Genres 被填充,而且实体 Genres 的集合 Movies 也被填充。因此,当我将要更新的电影发送到存储库时,如果我将实体附加到上下文,我会附加这部电影以及与我要更新的电影具有相同类型的所有电影。这是因为在实体的类型中包含与我要更新的电影具有相同类型的电影。

因此,如果在我的第一次搜索中我得到很多电影,当我想更新一部电影时,我会发送很多我不需要播种的实体,因此网络中的流量很大。

当我搜索结果时,有什么方法不会填充流派实体中的电影集合?因为我只填充我的主要实体电影的相关实体,而不是全部。

我正在使用 SQLite 和 EF 4.4;我试图找到 mergeOption 来禁用流派的跟踪,但我没有找到它。

谢谢。

4

1 回答 1

1

在设计实体和关系(逻辑设计)时,可以描述两个实体之间的多对多关系。当你需要在一个数据库中实现这些实体及其关系时(物理设计),你不能只用两张表来做;你真的需要一个中间表来表达关系。

两个实体之间的一对多关系只需要每个实体的表(简单外键关系)。因此,如果您的流派表只是给定电影的流派列表,它将是一对多的(电影作为父级,流派作为子级);那行得通。

但是,由于您已将流派描述为与电影存在多对多关系,因此建议将流派用于提供一种“选择列表”,即流派中的一行与任何特定行无关在电影中,但可以与任何电影相关(反之亦然)。为了使这种关系起作用,您需要一个中间表,我们称之为“moviegenres”,它只需要包含两列——一个与电影主键相关的外键,以及一个与流派主键相关的外键。该表实际上表达了您的多对多关系,然后通过向“moviegenres”添加行来为电影分配流派。

在考虑数据填充方式的任何问题之前,您需要首先解决逻辑到物理设计问题。

于 2013-06-18T17:45:29.740 回答