Если поле Id является автоинкрементным в базе данных (IDENTITY(1,1) в SQL Server), то при использовании BulkInsertOrUpdate в EFCore.BulkExtensions его НЕ нужно заполнять вручную.
Что происходит с Id при BulkInsertOrUpdate?
- Если
Idуже заполнен в сущности → EF Core попробует выполнить UPDATE. - Если
Idравен0(дляint) илиGuid.Empty(дляGuid) → EF Core попытается выполнить INSERT, но еслиIdавтоинкрементный, это может вызвать ошибки. - Если
Idавтоинкрементный в БД и вы его не задаёте → SQL Server сам сгенерируетIdпри вставке.
Как правильно использовать BulkInsertOrUpdate?
1. Если Id — int (автоинкремент)
❌ Ошибочный вариант (не надо присваивать Id)
csharpКопироватьРедактироватьvar entities = new List<MyEntity>
{
new MyEntity { Id = 0, Name = "Test1" }, // Ошибка, т.к. ID автоинкрементный
new MyEntity { Id = 0, Name = "Test2" }
};
dbContext.BulkInsertOrUpdate(entities);
✅ Правильный вариант (не заполняем Id)
csharpКопироватьРедактироватьvar entities = new List<MyEntity>
{
new MyEntity { Name = "Test1" },
new MyEntity { Name = "Test2" }
};
dbContext.BulkInsertOrUpdate(entities);
🔹 В этом случае SQL Server сам назначит Id при вставке.
2. Если Id — Guid (не автоинкрементный)
Если Guid является Primary Key, но не автоинкрементный, то Id нужно присваивать вручную:
csharpКопироватьРедактироватьvar entities = new List<MyEntity>
{
new MyEntity { Id = Guid.NewGuid(), Name = "Test1" },
new MyEntity { Id = Guid.NewGuid(), Name = "Test2" }
};
dbContext.BulkInsertOrUpdate(entities);
🔹 В отличие от int, SQL Server не создаёт Guid автоматически, если не используется NEWSEQUENTIALID().
Дополнительные настройки
Если Id автоинкрементный, можно явно указать, что его не надо вставлять:
csharpКопироватьРедактироватьvar bulkConfig = new BulkConfig { SetOutputIdentity = true };
dbContext.BulkInsertOrUpdate(entities, bulkConfig);
🔹 SetOutputIdentity = true → после INSERT обновит Id в сущностях.
Вывод
- Если
Idавтоинкрементный (IDENTITY), его не надо заполнять, SQL Server сделает это сам. - Если
Id—Guidи не автоинкрементный, его нужно устанавливать вручную. - Настройки
BulkConfigпомогают контролировать поведение

Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.