Пакетные вставки EF 4.0 и исключение для одной вставки - PullRequest
1 голос
/ 20 мая 2010

У меня возникла проблема со вставками в EF 4.0.

Во время миграции из одной системы в другую я переносил значения трех таблиц конфигурации в базу данных, созданную EF.

Сбой следующего кода:

foreach (MyModel model in models)
{
    if(entities.my_Model.Where(p => p.Id == model.modelId).Count() == 0 )
    {
        entities.AddTo_MyModel(new MyModel()
            {Name = model.Name, Id = model.modelId});
    }
}
entities.SaveChanges();

Обратите внимание, что вызов SaveChanges завершится с ошибкой ограничения, указывающей на то, что значение ID (PK) уже существует. Я не пытаюсь вставить дубликаты.

Следующий код DOES работает правильно.

foreach (MyModel model in models)
{
    if(entities.my_Model.Where(p => p.Id == model.modelId).Count() == 0 )
    {
        entities.AddTo_MyModel(new MyModel()
            {Name = model.Name, Id = model.modelId});
        entities.SaveChanges();
    }
}

Обратите внимание на перемещенное сохранение.

Есть что-то, чего я принципиально не понимаю в EF?

1 Ответ

2 голосов
/ 20 мая 2010

Я думаю, что проблема с переменной модели ...

Если вы можете попробовать:

foreach(MyModel model in models){
 var id = model.Id;
 var name = model.Name
 if(entities.my_Model.Where(p => p.Id == id).Count() == 0 )
 {
     entities.AddTo_MyModel(new MyModel()
              {Name = name, Id = id});
      }
}
entities.SaveChanges();

ИМО должна работать правильно ...

НТН.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...