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