Код: Выделить всё
CREATE TABLE "Orders"
(
"ID" INTEGER NOT NULL,
"Title" TEXT NOT NULL,
"Description" TEXT,
"Price" REAL NOT NULL,
"WarehouseID" INTEGER NOT NULL,
"Category" TEXT,
FOREIGN KEY("WarehouseID")
REFERENCES "Warehouses"("ID")
ON DELETE CASCADE ON UPDATE CASCADE,
PRIMARY KEY("ID" AUTOINCREMENT),
UNIQUE("Title", "Description", "Price", "WarehouseID", "Category") ON CONFLICT IGNORE
)
Код: Выделить всё
public static void SaveOrders(IEnumerable orders)
{
dbContext.Orders.AddRange(orders);
dbContext.SaveChanges();
}
Существует множество заказов, которые необходимо обрабатывать/сохранены в базе данных. Изначально все работает нормально, и до 1310 года все записывается в базе данных без hussle.
Но тогда происходит что -то странное.
Я получаю dbupdateconconcurrencyException (без внутреннего исключения), потому что EF -ядро ожидалось, что это может повлиять на 1 ряд, но вместо 0 был затронут. Попытки вставить запись, которая нарушает уникальный конфликт игнорировать ограничение, поскольку SQLite просто игнорирует ее, и 0 затронутых строк возвращаются, однако, если я запускаю команду вставки вручную (у меня включено журнал EF Core). Он вводит просто отлично.
Код: Выделить всё
Executing DbCommand [Parameters=[@p0='Sales, @p1='', @p2='24.90', @p3='16', @p4='iPhone XS 15 extra features camera, sleeve' (Size = 43)], CommandType='Text', CommandTimeout='30']
INSERT INTO "Orders" ("Category", "Description", "Price", "WarehouseID", "Title")
VALUES (@p0, @p1, @p2, @p3, @p4)
RETURNING "ID";
Подробнее здесь: https://stackoverflow.com/questions/794 ... t-succeeds