C# - 将外键关系转移到新ID

时间:2016-06-24 15:14:34

标签: c# entity-framework

假设我有一个名为“AB”的数据库表,其中包含2个构成主键的int列:A和B.它当前包含这两行(在现实生活中它会有更多行):

(A,B)

(1,1), (1,2), (2,1), (3,2)

使用EntityFramework,我想将包含B值为2的行“合并”到包含B值为1的行中。包含B值为2的所有行应在合并操作后传输。我希望结果看起来像这样:

(A,B)

(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查询。

1 个答案:

答案 0 :(得分:0)

我没有得到你想要的东西,但我有一些建议:

1.如果您要求,可以在Sql中使用约束作为主键。

2.忘记在实体中每次编辑后都使用entities.AB.Savechanges()。

相关问题