Проверки элементы не вставлены в рамки объекта 4.1

StackOverflow https://stackoverflow.com/questions/6300582

  •  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 Другой процесс уже мог вставить сущность. Нет простого способа справиться с этим.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top