C# 就多对多而言,包括许多对象

C# 就多对多而言,包括许多对象,c#,entity-framework-4,sqlite,C#,Entity Framework 4,Sqlite,我的数据库中的两个表之间有一个多对多关系,因此在我的edmx模型中,我只有两个表,没有中间表。这张桌子是电影和流派 当我搜索一些电影时,我也会得到相关的实体,因此通过快速加载,我会填充实体电影的集合类型。这就是我想要的 问题在于,当结果中有多个电影时,会填充实体电影的集合类型,但也会填充实体类型的集合电影。因此,当我向存储库发送一部要更新的电影时,如果我将实体附加到上下文,我将附加这部电影以及所有与我要更新的电影具有相同类型的电影。这是因为在实体的类型中包含与我要更新的电影类型相同的电影 因此,

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

当我搜索一些电影时,我也会得到相关的实体,因此通过快速加载,我会填充实体电影的集合类型。这就是我想要的

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

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

当我搜索结果时,有没有办法不填充流派实体中的电影集合?因为我只填充我的主要实体,电影的相关实体,而不是所有的

我使用SQLite和EF4.4;我试图找到mergeOption来禁用对流派的跟踪,但是我没有找到它


谢谢。

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

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

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


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

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

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

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


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

“我发送了很多实体”…“这是网络中的大量流量”:您将实体发送到何处,网络上的流量是什么?EF客户端和数据库之间根本不发送任何实体,只发送SQL语句和列/行数据。如果已填充或未填充反向导航属性,则这些数据量不会更改。或者你是说“网络”是指你将一个实体图移动到一个(web)服务边界上还是类似的地方?“我发送了很多实体”…“网络中有很多流量”:你将实体发送到哪里,网络上的流量是什么?EF客户端和数据库之间根本不发送任何实体,只发送SQL语句和列/行数据。如果已填充或未填充反向导航属性,则这些数据量不会更改。或者你的意思是“网络”是指你在(web)服务边界上移动一个实体图还是类似的东西?是的,在我的数据库中我有三个表,上面提到的两个表和作为中间表的MoviesGenes,只有两个表的FK。所以我只有两个实体,电影和类型,但没有电影类型。我在电影实体中收集了各种类型的作品,反之亦然。问题是执行查询时,EF会填充所有集合。EF填充电影中的类型集合,而in TYRES填充电影集合。所以一部电影有一个类型的集合,它有一个电影和电影的集合。所以当我只想更新一部电影时,我发送了很多实体。是的,在我的数据库中,我有三个表,上面提到的两个表和作为中间表的MoviesType,只有两个表的FK。所以什么时候我只有两个enti