0

У меня есть одна база данных, и мне нужно выполнить миграцию, другими словами мне нужно переместить данные в другую базу данных. Я использовал EF и автоматически генерировал классы с EDO. Проблема в newDb.SaveChanges встречается,() Вот мой код:Как избежать 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

Возможно, вы пытаетесь вставить новый ClaimComment, если идентификатор Claims.ID не существует (или не совпадает).

Вам нужно будет переупорядочить код, чтобы убедиться, что все FK существуют, прежде чем пытаться добавить запись с заданным ограничением.

+0

Да, Крис. Я остановился и подумал полчаса. Я узнал, что заполняю эту таблицу, а таблица претензий пуста, поэтому, когда я заполняю первую таблицу требований и заполняю таблицу ClaimsComments, ошибка не будет отображаться снова – Toni

0

Перед тем, как вставить в таблицу ClaimComment, вам необходимо иметь соответствующую таблицу ClaimId в таблице Claim. Итак, сначала убедитесь, что данные главной таблицы вставлены, а затем идут для дочерних таблиц.