У меня есть приложение с WCF сервера под управлением Entity Framework 6.Entity Framework 6 - DataServiceContext Обнаружение Имеет изменения
Мой клиент приложение потребляет OData с сервера через DataServiceContext, и в моем клиентском коде я хочу, чтобы иметь возможность позвонить метод HasChanges() в контексте, чтобы увидеть, изменились ли какие-либо данные в нем.
Я попытался, используя следующий метод расширения:
public static bool HasChanges(this DataServiceContext ctx)
{
// Return true if any Entities or links have changes
return ctx.Entities.Any(ed => ed.State != EntityStates.Unchanged) || ctx.Links.Any(ld => ld.State != EntityStates.Unchanged);
}
Но он всегда возвращает ложь, даже если объект его отслеживания действительно есть изменения.
Например, если у меня есть отслеживаемый объект с именем Customer, следующий код всегда возвращается перед вызовом SaveChanges().
Customer.Address1 = "Fred"
if not ctx.HasChanges() then return
ctx.UpdateObject(Customer)
ctx.SaveChanges()
Если я закомментируйте если не ctx.HasChanges() затем возвращают строку кода, изменения будут сохранены успешно, так что я рад, что компания получила изменения и в состоянии сохрани это.
Кажется, что изменение является получения отслеживается контекстом, только что я не могу определить, что факт из моего кода.
Может ли кто-нибудь сказать мне, как определить HasChanges в DataServiceContext?
Возможно, я не понимаю вариант использования, но почему бы просто не вызвать SaveChanges()? Если изменений нет, EF ничего не сделает. Предположительно, EF делает что-то подобное внутри, и вы просто изобретаете колесо. – Vlad274
Спасибо Владу, я хочу открыть диалог, чтобы сказать «Вы действительно хотите сохранить изменения», прежде чем фактически сохранить данные. Если изменений нет, я не хочу всплывать диалог. –