假设我有一个名为“AB”的数据库表,其中包含2个构成主键的int列:A和B.它当前包含这两行(在现实生活中它会有更多行):
(1,1), (1,2), (2,1), (3,2)
使用EntityFramework,我想将包含B值为2的行“合并”到包含B值为1的行中。包含B值为2的所有行应在合并操作后传输。我希望结果看起来像这样:
(1,1), (2,1), (3,1)
我如何使用EntityFramework完成此操作?到目前为止,我已经考虑过这样做(伪代码):
foreach (ABRow in entities.AB.Where(ab => ab.B == 2)
{
if (!entities.AB.Any(ab => ab.A == ABRow.A && ab.B == 1)
{
ABRow.B = 1; // Modify row to point to ID 1 instead of 2.
}
else
{
entities.Remove(ABRow); // Delete since it would cause a duplicate row to be created in the DB.
}
}
看起来这样效率会很低,因为你会在数据库中执行多个SQL查询。
答案 0 :(得分:0)
我没有得到你想要的东西,但我有一些建议:
1.如果您要求,可以在Sql中使用约束作为主键。
2.忘记在实体中每次编辑后都使用entities.AB.Savechanges()。