在多对多的关系中包含了很多对象
本文关键字:多对象 包含 关系 | 更新日期: 2023-09-27 18:18:59
我的数据库中的两个表之间有一个多对多的关系,所以在我的edmx模型中我只有两个表,没有中间表。这些表格是电影和类型。
当我搜索一些电影时,我也得到了相关的实体,所以通过急切加载,我填充了我的实体movies的genre集合。是我想要的。
问题是,当结果中有多个电影时,将填充实体MOvies的集合流派,同时也填充实体流派的集合电影。当我向存储库发送一个要更新的电影时,如果我将实体附加到上下文,我就附加了这个电影和所有与我要更新的电影具有相同类型的电影。这是因为在实体的类型中包含了与我想要更新的电影具有相同类型的电影。
如果在我的第一次搜索中,我得到了很多电影,当我想更新一部电影时,我发送了很多我不需要种子的实体,所以这是网络中的大量流量。
是否有任何方法,当我搜索结果的电影集合在类型实体不填充?因为我只填充我的主实体的相关实体,电影,而不是所有的。
我使用SQLite和EF 4.4;我试着找到mergeOption来禁用对流派的跟踪,但是我找不到它。
谢谢。
当您在设计实体和关系(逻辑设计)时,您可以描述两个实体之间的多对多关系。当你需要在数据库中实现这些实体和它们之间的关系(物理设计)时,你不能只用两个表来实现;您确实需要一个中间表来表达这种关系。
两个实体之间的一对多关系,每个实体只需要一个表(简单外键关系)。所以,如果你的类型表只是一个给定电影的类型列表,那么它将是一对多的(电影为父,类型为子);那就行了。
然而,由于你已经描述了类型与电影之间的多对多关系,这表明类型将用于提供一种"选择列表",即类型中的一行与电影中的任何特定行无关,但可能与任何电影相关(反之亦然)。为了使这种关系正常工作,您需要一个中间表,我们称它为"moviegenre",它只需要包含两个列—一个与电影主键相关的外键和一个与类型主键相关的外键。这个表实际上表达了多对多关系,然后通过向"moviegenre"添加行来为电影分配类型。
在考虑如何填充数据的任何问题之前,您需要首先解决逻辑到物理的设计问题。