我的数据库中两个表之间存在多对多关系,因此在我的edmx模型中,我只有两个表,而没有中间表。此表是电影和流派。
当我搜索一些电影时,我也会获得相关的实体,因此,由于渴望加载,我会填充我的实体电影的集合流派。是我想要的。
问题在于,当结果中有多于一部电影时,将填充实体MOvies的集合流派,而且还将填充实体流派的集合Movies。因此,当我将一个要更新的电影发送到存储库时,如果将实体附加到上下文,则会附加该电影以及所有具有与要更新的电影相同类型的电影。这是因为在实体的类型中包括与我要更新的电影具有相同类型的电影。
因此,如果我第一次搜索到很多电影,那么当我想更新一部电影时,我会发送很多不需要播种的实体,因此网络中的流量很大。
有什么方法可以在我搜索结果时不填充流派实体中的电影集?因为我只填充电影中的主要实体(而不是全部)的相关实体。
我正在使用SQLite和EF 4.4;我尝试找到mergeOption来禁用流派跟踪,但是我没有找到它。
谢谢。
最佳答案
在设计实体和关系(逻辑设计)时,可以描述两个实体之间的多对多关系。当您需要在数据库(物理设计)中实现这些实体及其关系时,您不能仅使用两个表来实现;您确实需要一个中间表来表达这种关系。
两个实体之间的一对多关系仅需要每个实体一个表(简单的外键关系)。因此,如果您的流派表只是给定电影的流派列表,那么它将是一对多的(电影作为父母,流派作为孩子);那会起作用。
但是,由于您将流派描述为与电影有多对多关系,因此建议使用流派来提供某种“选择列表”,即流派中的某一行与任何特定行都不相关在电影中,但可能与任何电影有关(反之亦然)。为了使这种关系起作用,您需要一个中间表,我们将其称为“ moviegenres”,该表仅包含两列-与电影的主键相关的外键,以及与体裁的主键相关的外键。该表实际上是在表达您的多对多关系,然后通过向“电影流派”中添加行来为电影分配流派。
在考虑数据填充方式的任何问题之前,需要首先解决逻辑到物理设计问题。
关于c# - 相对于多对多,包含了很多对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17175045/