EF 6 - 多对多 - 连接表没有重复

时间:2013-04-09 03:37:30

标签: entity-framework many-to-many entity-framework-6

我正在使用EF6在播种多对多关系方面存在一些困惑。

我有以下内容:

User 已保存ChartQueries(他们可以执行以获取图表)。 ChartQuery通常只属于一个用户,但每个ChartQuery都可以执行多个“共享”User。因此,我使用联接表UserChartQuery设置了多对多关系。这些表在数据库中就可以在连接表的每一侧以1对多的方式完成。

但是,我不太了解如何播种或使用这种关系。我不想最终得到“共享”ChartQuery的几个副本(每个User重复一次)。相反,每个“共享”ChartQuery应该只有一行,它是每个User的{​​{1}}集合的一部分(以及其他非共享SavedChartQueries仅属于ChartQuery的。)

似乎我被迫为每个用户复制:

User

首先,这是通过直接通过UserChartQueries表播种的正确方法,还是应该为每个 var sharedChartQuery = new ChartQuery { ... }; var nonSharedChartQuery = new ChartQuery { ... }; var userOneChartQueryOne = new UserChartQuery { User = userOne, ChartQuery = sharedChartQuery }; var userTwoChartQueryOne = new UserChartQuery { User = userTwo, ChartQuery = sharedChartQuery }; var userTwoChartQueryTwo = new UserChartQuery { User = userTwo, ChartQuery = nonSharedChartQuery }; context.UserChartQueries.Add(userOneChartQueryOne); context.UserChartQueries.Add(userOneChartQueryTwo); context.UserChartQueries.Add(userTwoChartQueryTwo); 的SavedChartQueries导航属性播种?

这会导致每个User的联接表中出现重复sharedChartQuery吗?如果有,有什么方法可以避免这种情况吗?

1 个答案:

答案 0 :(得分:0)

好的,我明白这是如何运作的。以下按预期工作:

   var userOne = new User {};
   var userTwo = new User {};
   var chartQuery = new ChartQuery { };

        context.Users.Add(userOne);
        context.Users.Add(userTwo);
        context.UserChartQueries.Add(new UserChartQuery { User = userOne, ChartQuery = chartQuery });
        context.UserChartQueries.Add(new UserChartQuery { User = userTwo, ChartQuery = chartQuery });
        context.ChartQueries.Add(chartQuery);

最后一行将其添加到记录实际所在的表中。检查SSMS中的连接表显示它只保存外键而不保留其他内容。没有重复。