2015-06-30 41 views
1

Я вставляю данные в таблицу для теста интеграции с использованием Entity Framework 6. Когда я выполняю следующий код, я получаю исключение DbUpdateConcurrencyException при вызове SaveChanges().DbUpdateConcurrencyException при вставке

using (var context = new CONTACTEntities()) 
{ 
    context.Facilities.AddRange(facilities); 
    context.SaveChanges(); 
} 

Я не уверен, почему это происходит. Стол должен быть пустым, так как таблицы отбрасываются/создаются до запуска теста, и это единственное место в тесте, которое я вставляю в эту таблицу. Есть идеи?

+0

Можем ли мы увидеть код для создания объектов и модель данных? –

+1

Действительно странно, потому что исключение Cuncurrency возникает только на SQL Server UPDATE и DELETE. Как вы заполняете оборудование? Кроме того, включите профилировщик SQL Server, чтобы увидеть инструкцию UPDATE/DELETE, которая вызывает исключение. – bubi

+0

У меня была такая ситуация с столбцом 'datetime2 (7)', который был помечен как «DatabaseGeneratedOption.Computed», когда действительно нужно было «DatabaseGeneratedOption.None». – Klors

ответ

0

Если вы используете SQLServer и у вас есть столбец datetime в таблице, измените тип столбца на datetime2 (7).

Звучит странно, но это работает. Объяснение - это примерно миллисекунды.

Вы должны знать, как Entity Framework обрабатывает ключи в вашей таблице. В моем коде я установил HasDatabaseGeneratedOption. В коде может быть иначе.

public class IceCatCategoryMap : EntityTypeConfiguration<IceCatCategory> 
{ 
    public IceCatCategoryMap() 
    { 
     ToTable("SemlerServices_IceCatCategory"); 
     HasKey(m => m.Id); 
     Property(m => m.Id).IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 
    } 
} 
Смежные вопросы