实体框架更改跟踪器

时间:2013-11-27 00:27:00

标签: system.reactive entity-framework-6

在更改HasChanges时,EF6 ChangeTracker中是否有任何可以观察到创建事件的内容?

基本用法是在上下文注册更改时打开视图模型上的SAVE按钮。

1 个答案:

答案 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,以避免丢失未保存的更改。