ali*_*ray 6 c# wpf entity-framework save mvvm
在我的WPF MVVM应用程序中,我希望对我的Entity Framework实体类的更改会自动保留回数据库.我有一些关于实现此功能的想法,但它们似乎都不是最佳选择.
以下是我目前的(非最佳)想法:
使用a DispatcherTimer保存每个间隔的更改:
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += (sender, args) => Repository.SaveChanges();
timer.Start();
Run Code Online (Sandbox Code Playgroud)保存程序OnExit()方法的更改.
protected override void OnExit(ExitEventArgs e)
{
Repository.SaveChanges();
base.OnExit(e);
}
Run Code Online (Sandbox Code Playgroud)每次OnPropertyChanged()调用我的一个保存更改Entities:
protected virtual void OnPropertyChanged(string propertyName)
{
Repository.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)2和3的组合; 在计算任意数量的属性更改后保存数据,并保存OnExit()以捕获未达到更改限制的任何更改:
const int limit = 5;
int changes = 0;
protected virtual void OnPropertyChanged(string propertyName)
{
if (++changes == limit)
{
Repository.SaveChanges();
changes = 0;
}
}
Run Code Online (Sandbox Code Playgroud)我假设1和3是所有这些中表现最差的,如果程序崩溃,2(不是100%肯定)将不会保存任何更改.4是我的首选选项,因为它平衡了执行的保存量.
所以,我的问题是:根据您的经验或其他方式,解决/解决此问题的最佳方法是什么?
提前致谢.
稍微离题一下;您还允许用户手动保存吗?我认为这对这个问题很重要,因为它应该有助于确定您对自动保存行为的严格程度。
另一个考虑因素;是否允许部分提交?如果用户更改了一条信息,则会启动自动保存,用户更改另一条信息,然后应用程序崩溃。自动保存是否有可能导致数据损坏,因为它保存了本应是尚未完全完成的原子操作?
现在,既然您提到数据库是本地数据库,那么您不必太担心客户端-服务器数据库的延迟。这意味着高频率的提交应该没问题。因此,我完全排除选项2。退出时保存一次似乎风险太大。
我喜欢对属性更改做出反应并然后保存的想法,但前提是上面的部分提交考虑不会成为问题。它将确保及时提交所有数据。
如果用户有办法手动保存数据,我可能会采用定时方法。将其设置为 10 秒(或某个值),然后触发自动保存,并向用户显示自动保存已触发的通知。
我认为,最需要担心的是用户期望发生的事情。如果您对每项更改都进行了承诺,那么用户(可能)不会对其崩溃时数据的状态感到惊讶。自动保存通知也是如此。通知用户保存间隔将使他们摆脱崩溃的困扰,并确信他们的数据状态仍然相对新鲜。
| 归档时间: |
|
| 查看次数: |
3017 次 |
| 最近记录: |