EF Core не может вставить запись, но ручная вставка добивается успехаC#

Место общения программистов C#
Anonymous
EF Core не может вставить запись, но ручная вставка добивается успеха

Сообщение Anonymous »

У меня есть база данных SQLite со следующей таблицей: < /p>

Код: Выделить всё

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
)
Использование microsoft.entityframeworkcore.sqlite 9.0.2 У меня есть список Заказы , который я добавляю в контекст, как это:

Код: Выделить всё

public static void SaveOrders(IEnumerable orders)
{
dbContext.Orders.AddRange(orders);
dbContext.SaveChanges();
}
Приведенный выше метод называется несколько раз, его проводятся в списке заказов с примерно 100 членами каждый раз.
Существует множество заказов, которые необходимо обрабатывать/сохранены в базе данных. Изначально все работает нормально, и до 1310 года все записывается в базе данных без hussle.
Но тогда происходит что -то странное.
Я получаю dbupdateconconcurrencyException (без внутреннего исключения), потому что EF -ядро ожидалось, что это может повлиять на 1 ряд, но вместо 0 был затронут. Попытки вставить запись, которая нарушает уникальное конфликт игнорировать ограничение, так как SQLite просто игнорирует его, и 0 затронутых строк возвращаются, однако, если я запускаю команду вставки вручную (у меня включено журнал EF). Он вводит просто хорошо (добавляется новая запись).
Это командные ef -журналы, которые можно выполнить, чтобы выполнить «/p> p> p> p> p> prement
prement
Это командные ef -журналы, которые можно выполнить», чтобы выполнить «/p> p> p> p> prement » .

Код: Выделить всё

  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";
< /code>
Если я выполняю следующую команду: < /p>
INSERT INTO "Orders" ("Category", "Description", "Price", "WarehouseID", "Title")
VALUES ('Sales', '', '24.90', '16', 'iPhone XS 15 extra features camera, sleeve')
RETURNING "ID";
< /code>
sqlite возвращает < /p>
Execution finished without errors.
Result: 0 rows returned in 15ms
< /code>
Запись не вставлена, независимо от того, сколько раз я запускаю команду.INSERT INTO "Orders" ("Category", "Description", "Price", "WarehouseID", "Title")
VALUES ('Sales', '', '24.90', '16', 'iPhone XS 15 extra features camera, sleeve')
< /code>
i.e. Без возврата "ID" 
часть. Эта команда преуспевает и вставляет запись. Последующие выполнения этой команды или команды с возвращающимся «id» part оба не удастся уникальный ограничение. /> В исходных данных есть два идентичных порядка. Поэтому, когда я говорю EF, чтобы добавить ряд заказов - в этой коллекции есть два идентичных члена. Кикер? EF не удается при попытке вставить первый из двух. < /P>
EF Core сообщает о уникальном нарушении ограничений , даже если база данных нет. Это похоже на то, что EF сообщает о нарушении сущностей, которые он еще предстоит вставить . Нет параллелизма любого рода .>

Подробнее здесь: https://stackoverflow.com/questions/794 ... t-succeeds

Вернуться в «C#»