什么是WPF和EF应用程序的良好模型结构?

时间:2015-07-08 10:19:29

标签: .net wpf entity-framework mvvm inotifypropertychanged

简短问题:是否有最佳做法是设置单个模型来处理EF的延迟加载功能以及WPF的任何后台数据更改的接口同步?

更长的解释/问题(以及我目前的解决方案):

有很多文章用WPF解释MVVM,大量文章使用基本模型类和DBContext用于EF,但没有(我发现)将2连接在一起,

我的应用程序是一个客户端WPF应用程序,它使用EF将应用程序生成的数据持久保存到本地SQLite数据库;有一些后台工作线程,WPF应用程序将触发这些线程从其他需要持久化的位置返回数据,但是如果线程完成并且在其运行时返回到WPF应用程序,则该数据将仅保存到数据库 - 否则结果将被丢弃,应用程序将在下次再次尝试运行该线程,

现在我遇到了我的问题......

EF需要虚拟ICollections进行延迟加载(我需要),但为了确保后台数据与WPF应用程序上显示的内容同步,我需要使用ObservableCollections并实现INotifyPropertyChange接口以及其他字段 - 所以例如 - 假设我有一个Customer类,其中包含一系列购买,为了满足EF和WPF要求,我需要购买表示为虚拟ICollection和ObservableCollection,

我的问题是,为了保持一个支持EF和WPF的统一模型,最好的做法是什么?

我目前的方法是拥有2个模型 - 一个“工作”ViewModel和一个“持久”模型。

工作模型与持久化模型具有相同的数据,但工作模型位于WPF应用程序的ViewModel中 - 并且数据集合为ObservableCollections,所有通知代码都与其连接,还有业务逻辑(后面有一篇很好的文章here)。持久性模型由POCO组成,并且所有集合都作为延迟加载的虚拟ICollections,除了使用EF之外没有其他工作要做。当应用程序被加载时,在App.xaml.cs文件中,我将我需要的“持久”模型从SQLite加载到WPF的“工作”ViewModel中,然后让应用程序执行其操作 - 然后加载任何其他内容根据需要将数据保存到工作的ViewModel中。

我期待您的想法/其他解决方案。

由于

我不是博客,但我确信博客帖子中只有这些内容!

刚刚找到的另一个解决方案可能是完全废弃EF,因为它并不适合这种设计 - 可能只是一个自定义数据持久层。

值得注意的是,我的应用程序并不是大规模跨越100个模型类,当它完成时可能会有大约10个,所以这对我的情况有用 - 但我总是喜欢阻止自己不得不做额外的工作,如果我可以 - 并学习新的东西 - 我简要地看了Fody将INotifyPropertyChange元素编织到模型中,但是遇到了.NET 4.6的一些问题所以支持了 - 我现在有足够的移动部件而不是试图理解和调试别人的代码。

0 个答案:

没有答案