我正在使用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
吗?如果有,有什么方法可以避免这种情况吗?
答案 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中的连接表显示它只保存外键而不保留其他内容。没有重复。