Проверки элементы не вставлены в рамки объекта 4.1
-
22-10-2019 - |
Вопрос
Я использую Entity Framework, и часть моего кода хочу поместить, скажем, 100 объектов в базу данных. Некоторые из сущностей, которые я вставляю, имеют много отношений, и я хочу убедиться, что я вставляю только новые предметы. Легко проверить существующие в БД, но если я уже вставил его в свою текущую сеанс, чтобы сохранить 100 предметов, я получу повторяющиеся предметы.
Дело в том, что основной ключ просто сгенерирована автоматически, а уникальность таблицы происходит из уникального столбца, который не поддерживается в EF. Как проверить, еще не вставил ли я часть моего сеанса в EF 4.1? Я видел метод поиска на DBContext, но который нуждается в Primay -ключе, который я не могу использовать. Учитывая, что я использую 4.1, я тоже застрял в DBContext. Как я могу иметь общий способ проверить это?
Решение
Если вы хотите использовать EF, вы должны придерживаться PK в качестве уникальной идентификации ваших сущностей. В противном случае ваш опыт разработки будет довольно плохим.
Если вы хотите проверить, обработали ли вы один и тот же элемент в текущем контексте. Использование:
bool exists = context.YourDbSet.Local.Any(x => x.UniqueId == someId)
Если вам нужно проверить состояние использования сущности:
EntityState state = context.Entry(entity).State;
Если вам нужно проверить, существует ли объект в базе данных:
YourEntity entity = context.YourDbSet.SingleOrDefault(x => x.UniqueId == someId);
Последнее утверждение на самом деле не лучший способ в одновременной системе, потому что, когда вы называете ее, сущность не должна существовать, но как только вы звоните SaveChanges
Другой процесс уже мог вставить сущность. Нет простого способа справиться с этим.