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

How to avoid System.Data.Entity.Infrastructure.DbUpdateException when doing migration

我有一个数据库,我需要做迁移,换句话说,我需要将数据移动到另一个数据库。我使用过 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

内部异常:

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

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

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

在插入 ClaimComment table 之前,您需要在 Claim table 中有相应的 ClaimId。因此,首先确保插入主 table 数据,然后再插入子 tables.