Да, так как приведенные выше ответы указывают, вы проверяете EntityState для сущности в OSM.
Однако имейте в виду, что это работает только для сущностей, связанных с контекстом / графиком.
В настоящее время я работаю с отсоединенными сущностями (ASP.NET MVC), и поскольку они не привязаны к графику, EntityState не изменяется.
В этом случае я делаюпредупредительный вызов в БД для получения объекта ключом.Если ничего не возвращается, я делаю Add, в противном случае я использую ApplyCurrentValues для переопределения значений, затем делаю .SaveChanges
Мне все еще интересно, если этоправильный путь, но подумал, что я бы это там изложил.
Я использую POCO, у которых нет отслеживания изменений, поэтому мне нужно проделать немного больше работы.
Поскольку EntityState для POCO отсутствует, вам нужно вручную вызвать OSM:
var pocosInGraph = ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified)
После того, как вы присоедините / добавите, ваш POCO должен быть в этой коллекции.
Как я уже сказал, если это для приложения MVC, ваши сущности отсоединяются по HTTPPOST, и, следовательно, EntityState все равно останется неизменным.
В моем случае я вручную установил EntityState после присоединения:
ctx.Attach(poco);
ctx.ObjectStateManager.ChangeObjectState(poco, EntityState.Modified);
ctx.SaveChanges();