Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 要订阅任何事件—不仅是INotifyPropertyChanged,还需要使用IDisposable取消订阅自身及其子ViewModels。我不清楚您所描述的数据层,但如果它发布任何修改的属性更改事件,我认为使用INotifyPropertyChanged不会有任何问题_C#_Entity Framework_Mvvm_Architecture - Fatal编程技术网

C# 要订阅任何事件—不仅是INotifyPropertyChanged,还需要使用IDisposable取消订阅自身及其子ViewModels。我不清楚您所描述的数据层,但如果它发布任何修改的属性更改事件,我认为使用INotifyPropertyChanged不会有任何问题

C# 要订阅任何事件—不仅是INotifyPropertyChanged,还需要使用IDisposable取消订阅自身及其子ViewModels。我不清楚您所描述的数据层,但如果它发布任何修改的属性更改事件,我认为使用INotifyPropertyChanged不会有任何问题,c#,entity-framework,mvvm,architecture,C#,Entity Framework,Mvvm,Architecture,3.我的数据访问层上当前有一个DataChanged事件。无论何时发生创建、更新或删除操作,都会调用它。每个 可同时显示的ViewModel侦听此事件, 检查更改的模型是否为其ViewModel的模型,以及 然后更新它自己的属性。我又一次遇到了这个问题 内存泄漏,这会变得很慢,因为必须使用太多的ViewModel 检查更改是否真的适合他们 如前所述,如果您正确处理所有型号的订阅/取消订阅,则无需担心INotifyPropertyChanged的性能问题。但是,可能会增加问题的是您为请求数据而对数

3.我的数据访问层上当前有一个DataChanged事件。无论何时发生创建、更新或删除操作,都会调用它。每个 可同时显示的ViewModel侦听此事件, 检查更改的模型是否为其ViewModel的模型,以及 然后更新它自己的属性。我又一次遇到了这个问题 内存泄漏,这会变得很慢,因为必须使用太多的ViewModel 检查更改是否真的适合他们

如前所述,如果您正确处理所有型号的订阅/取消订阅,则无需担心INotifyPropertyChanged的性能问题。但是,可能会增加问题的是您为请求数据而对数据库进行的调用的数量。您是否考虑过使用Async…wait for the data access layer(数据访问层),它不会阻止UI进行任何更新。即使数据更新很慢,一个不被数据调用阻塞的反应式UI也是一个更好的选择

因此,请尝试添加一个在DAL层上抽象的数据访问服务,并提供一种异步方法来访问数据。还可以看一看。这可能会有帮助

我也不确定我访问数据的地方是否真的很好 被选中的。PageViewModels已经变得非常复杂和复杂 基本上什么都做。所有视图模型都需要了解 数据层与我的架构

我看到的两个主要问题

  • 如果您觉得PageViewModel太大,请将其分解为可管理大小的子视图模型。这是非常主观的,因此您必须尝试查看哪些部分可以使用自己的viewmodel分解为自己的组件/用户控件
  • 当您说ViewModels需要数据层的知识时,我希望您的意思是它们依赖于一个管理DAL层服务的接口,而不具有使用CRUD方法直接访问类的权限。如果没有,请尝试添加一个抽象层,这实际上是在视图模型中执行的。这将处理DAL积垢的操作
  • 我一直在考虑放弃使用sqlite net进行数据访问,并使用 实体框架7

    在没有确凿证据的情况下,不要试图用EF替换sqlite net。在尝试进行如此大的更改之前,您需要测量应用程序的性能。如果问题在于您的代码而不是您正在使用的组件,该怎么办。首先尝试修复上述问题,然后您可以通过接口隔离DAL层,并在需要时替换它

    我也一直想知道双向数据绑定是否好 在MVVM应用程序中根本不需要idea,因为它需要属性设置器 调用数据访问层以保持更改。这样更好吗 是否仅执行单向绑定并通过命令持久化所有更改


    如果每次更改字段/每个按键笔划时都直接调用数据库,则这是一个问题。然后,您应该拥有数据模型的副本,并仅在单击“保存”按钮时保留更改。

    我想我要添加一个数据服务层,目前所有ViewModels都访问DAL的接口。我的数据访问已经是异步的,但我正在考虑使其同步,因为我通常一行有数百个读取操作。(更少但更复杂的是需要直接公开sqlite net功能。)这会降低性能,因为为每个小请求创建任务会带来开销(sqlite net就是这样做的),而且还会阻止事务的使用。因此,对DAL的访问将是同步的,但新的数据服务层将是异步的!这已经帮了我不少忙。干杯。。。我很高兴这是有益的。你不必担心任务创建的开销,除非你做错了。数据服务层的理念是好的,也是需要的。除非您有证据证明异步导致了问题,否则不要删除它。您可能会在没有证据的情况下进行预成熟优化,从而损害系统。我建议不要这样做,除非你能模拟你的方法并测量差异。最后一段+1。您不应该将更改直接持久化到数据库中,尤其是属性中。属性应该是快速的,执行长时间运行的操作会阻塞它们,并且解决方法非常糟糕。通过命令持久化,它们是可以等待的