在更改HasChanges时,EF6 ChangeTracker中是否有任何可以观察到创建事件的内容?
基本用法是在上下文注册更改时打开视图模型上的SAVE按钮。
答案 0 :(得分:0)
这对我来说是错误的。您的视图应该通知您的视图模型的更改(通常通过将视图绑定到实现INotifyPropertyChanged
的视图模型)。然后,您的视图模型可以直接保存,而无需进入数据层。像ReactiveUI
这样的图书馆可以帮助您轻松实现这一目标。
然而,如果你想变得邪恶(是的,我在这一点上是固执的!)你可以在计时器上检查它。我可以想到这样做的唯一原因是因为你是在跨视图分享你的上下文 - 但这仍然是一个非常糟糕的原因:
var hasChanges = Observable.Interval(TimeSpan.FromSeconds(0.5))
.Select(_ => DbChangeTracker.HasChanges);
hasChanges.ObserveOnDispatcher.Subscribe(i => /* logic to set save button state */);
如果您沿着这条路走下去,您还需要在退出视图之前检查DbChangeTracker.HasChanges
,以避免丢失未保存的更改。