0

私は1つのデータベースを持っているので、移行を行う必要があります。つまり、別のデータベースにデータを移動する必要があります。私はEFを使い、EDOで自動的にクラスを生成しました。問題がnewDb.SaveChanges()でoccures ここに私のコードです:私はそれを実行すると移行を行うときにSystem.Data.Entity.Infrastructure.DbUpdateExceptionを回避する方法

 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 \"、表\ "dbo.Claims \"、列 'ID'で競合が発生しました。\ r \ n文が終了しました。

答えて

0

Claims.IDが存在しない(または一致しない)ときに新しいClaimCommentを挿入しようとしているようです。

制約が定義されているレコードを追加する前に、すべてのFKが存在することを確認するためにコードを並べ替える必要があります。

+0

はい、クリス。私は停止し、30分考えました。クレームテーブルが空であることがわかったので、最初のクレームテーブルを記入し、クレームコメントテーブルに記入すると、エラーは再び表示されません – Toni

0

ClaimCmentテーブルに挿入する前に、Claimテーブルに対応するClaimIdが必要です。マスターテーブルのデータが挿入されていることを確認してから、子テーブルに移動します。

関連する問題