Я использую EntityFramework 5 работает на .NET 4.5Как получить исходное значение из DbContext.Attach()?
Я пытаюсь выполнить обновление записи, используя подход, как показано ниже:
var rec = DbCntx.MyRecords.Attach(changedRecord);
var entry = DbCntx.Entry(changedRecord);
if (entry.State == EntityState.Modified) DbCntx.SaveChanges();
Переданный в объекте данных changedRecord содержал по меньшей мере, 1 значение поля изменено, сравнено с фактическим дБ. Однако элемент Entry.State всегда неизменен, поэтому SaveChanges() никогда не запускается.
Я пишу эту процедуру обновления для поддержки любых изменений данных в файле changedRecord, изменения данных полностью зависят от клиента/вызывающего, поэтому я не должен специально изменять значение поля в этой процедуре.
Моя проблема с использованием этого подхода, я не могу получить исходные значения данных. Весь объект, к которому я могу получить доступ, является точным измененнымRecord, который является отключенной записью с изменениями, которые я не передал в db.
Без исходных данных я не могу определить, какие свойства являются изменениями. Если я попытаюсь использовать Find(), First/SingleOrDefault(), чтобы найти запись 1st, я не могу использовать Attach() позже, поскольку это вызовет ошибку «ObjectStateManager не может отслеживать несколько объектов с одним и тем же ключом».
от Googling, некоторые намекают на использование Detach(), но Detach недоступен в DbContext.
Я нашел обходной путь, чтобы получить работу Detach: http://stackoverflow.com/questions/4168073/entity-framework-code-first- no-detach-method-on-dbcontext – Kelmen