0

我正在使用 EF6 对播种多对多关系有些困惑。

我有以下内容:

A保存User许多ChartQueries(他们可以执行以获取图表)。AChartQuery通常只属于一个用户,但是每个用户都可以执行多个“共享ChartQueryUser。结果,我使用连接表建立了多对多UserChartQuery关系。这些表在连接表的每一侧以一对多的方式在数据库中正常运行。

但是,我不太了解如何播种或使用这种关系。我不想最终得到“shared” ChartQuerys 的多个副本(每个副本都有一个副本User)。相反,每个“共享”应该只有一行,ChartQuery它是 each 集合的一部分 User(以及仅属于该SavedChartQueries集合的其他非共享s )。ChartQueryUser

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

  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);

所以首先这是播种的正确方法(直接通过 UserChartQueries 表)还是我应该播种每个User的 SavedChartQueries 导航属性?

这会导致sharedChartQuery每个连接表中的重复User吗?如果是这样,有什么办法可以避免这种情况?

4

1 回答 1

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 中的连接表表明它只包含外键,没有其他内容。没有重复项。

于 2013-04-09T06:20:39.490 回答