执行迁移时如何避免System.Data.Entity.Infrastructure.DbUpdateException

时间:2016-12-13 13:25:05

标签: sql database entity-framework migration ado.net-entity-data-model

我有一个数据库,我需要进行迁移,换句话说,我需要将数据移动到另一个数据库。我使用过EF,并使用EDO自动生成类。问题出现在newDb.SaveChanges() 这是我的代码:

        var oldDb = new oldBAEntity();
        var newDb = new NewDbContextEntities();

        var query2 = oldDb.R_ClaimHistory.ToList();

        foreach (var sourceObj in query2)
        {
            ClaimComment targetobj = new ClaimComment();

            targetobj.ClaimId = (int)sourceObj.IdClaim;
            targetobj.Comment = sourceObj.HistClaimDescription;
            targetobj.UserCreated = (int)sourceObj.IdUserCreated;
            targetobj.DateCreated = sourceObj.DateCreated;

            newDb.ClaimComments.Add(targetobj);
        }
        newdb.SaveChanges();

当我运行它时,我收到此错误:

System.Data.Entity.Infrastructure.DbUpdateException

InnerException:

INSERT语句与FOREIGN KEY约束“FK_ClaimComments_Claims \”冲突。冲突发生在数据库\“Toni-Bank-DB \”,table \“dbo.Claims \”,列'ID'。\ r \ n语句已终止。

2 个答案:

答案 0 :(得分:0)

当Claims.ID不存在(或不匹配)时,您似乎试图插入新的ClaimComment。

在尝试添加已定义约束的记录之前,您需要重新排序代码以确保所有FK都存在。

答案 1 :(得分:0)

在插入ClaimComment表之前,您需要在Claim表中拥有相应的ClaimId。因此,首先确保插入主表数据​​,然后转到子表。