gpt4 book ai didi

c# - WPF MVVM : Saving Data automatically

转载 作者:太空狗 更新时间:2023-10-29 21:55:34 25 4
gpt4 key购买 nike

在我的 WPF MVVM 应用程序中,我希望对我的 Entity Framework 实体类所做的更改自动保存回数据库。我有一些关于实现此功能的想法,但似乎没有一个是最佳的。

这是我目前(非最佳)的想法:

  1. 使用 DispatcherTimer 每隔一段时间保存更改:

    DispatcherTimer timer = new DispatcherTimer();
    timer.Interval = TimeSpan.FromSeconds(1);
    timer.Tick += (sender, args) => Repository.SaveChanges();
    timer.Start();
  2. 在程序的 OnExit() 方法中保存更改。

    protected override void OnExit(ExitEventArgs e)
    {
    Repository.SaveChanges();
    base.OnExit(e);
    }
  3. 每次在我的一个 Entities 上调用 OnPropertyChanged() 时保存更改:

    protected virtual void OnPropertyChanged(string propertyName)
    {
    Repository.SaveChanges();
    }
  4. 2 和 3 的组合;在计算任意数量的属性更改后保存数据,并保存在 OnExit() 中以捕获任何未达到更改限制的更改:

    const int limit = 5;
    int changes = 0;

    protected virtual void OnPropertyChanged(string propertyName)
    {
    if (++changes == limit)
    {
    Repository.SaveChanges();
    changes = 0;
    }
    }

我假设 13 是所有这些中表现最差的,2(不是 100% 确定)不会如果程序崩溃,请保存任何更改。 4 是我的首选选项,因为它平衡了执行的保存量。

因此,我的问题是:根据您的经验或其他经验,处理/解决此问题的最佳方法是什么?

提前致谢。

最佳答案

说点题外话;您还允许用户手动保存吗?我认为这对问题很重要,因为它应该有助于确定您需要对自动保存行为采取多严格的措施。

另一个考虑;允许部分提交吗?如果用户更改一条信息,自动保存开始,用户更改另一条信息,然后应用程序崩溃。自动保存是否可能由于保存了本应是未完全完成的原子操作而导致数据损坏?

现在,由于您提到数据库是本地数据库,因此您不必太担心客户端-服务器数据库的延迟。这意味着高频率的提交应该没问题。因此,我会完全排除选项 2。退出时保存一次似乎风险太大。

我喜欢对属性更改使用react然后保存的想法,但前提是上述部分提交考虑不会成为问题。它将确保及时提交所有数据。

如果用户有办法手动保存他们的数据,我可能会选择定时方法。将其设置为 10 秒(或某个值),然后触发自动保存,并向用户显示自动保存已触发的通知。

我认为,主要担心的是用户期望发生什么。如果您对每一项更改都做出 promise ,用户(可能)不会对崩溃时的数据状态感到惊讶。自动保存通知也是如此。告知用户保存间隔将使他们能够摆脱崩溃,相信他们的数据状态仍然相对较新。

关于c# - WPF MVVM : Saving Data automatically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6166301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com