c# – 在WPF MVVM中使用不断刷新的存储库来保持EF更改
使用MVVM处理
WPF应用程序并由Entity Framework提供支持.出于可用性目的,我们非常希望允许用户多窗口此应用程序.但是,这可能会导致EF出现问题.如果我们坚持通常建议每个ViewModel创建一个Repository副本,并且有人打开同一ViewModel的多个窗口,则可能导致“IEntityChangeTracker的多个实例”错误.
我们不是选择有自身问题的Singleton,而是通过在获取新数据上下文的存储库中放置Refresh方法来解决这个问题.然后我们在整个商店做这样的事情: using (IRepository r = Rep.Refresh()) { r.Update(CurrentCampaign); r.SaveChanges(); } 哪个大部分都好.但是,它会导致维持状态的问题.如果在用户使用对象时刷新上下文,则其更改将丢失. 我可以看到两种方法,这两种方式都有其自身的缺点. >我们不断致电SaveChanges.这有可能通过持续的数据库调用来减慢应用程序的速度.此外,有时我们不想存储不完整的对象. 还有另外一种方法吗? 解决方法
我认为将实体框架作为单例访问的存储库可能并不总是错误的.
如果你有一个场景,你有一个客户端存储库,即一个存储库,它是客户端应用程序的可执行文件的一部分,即由一个客户端使用,那么单例可能没问题.当然我不会在服务器端使用单例. 我问过Brian Noyes(微软MVP)关于复数网站上“MVVM”课程的类似问题. 我问道:“处理视图模型中使用的客户端服务的正确方法是什么?” 在他的回答中,他写道:“……无论如何,我的大多数客户服务都是单身人士,并为应用程序的生命而活.” 此外,只要你有一个单身人士的界面,拥有一个单身人士并不会阻止你编写单元测试. 如果您使用依赖注入框架(请参阅标记注释),这对于自身来说是一个好主意,更改为单例实例化只是对相应类的注入容器的设置执行小的更改. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |