繁体   English   中英

实体框架+ SQL Server Compact + WPF / WinForms =缓慢的用户界面?

[英]Entity Framework + SQL Server Compact + WPF/WinForms = Sluggish UI?

实体框架不允许在多个数据库上下文之间共享同一实体。 因此,我必须在GUI应用程序中使用一个数据库上下文 (无论是WPF还是WinForms),因为实体需要相互交互。

SQL Server Compact不允许在多个线程之间共享相同的数据库连接 如果我尝试在一个线程上创建连接并在另一个线程上运行SQL查询,我的应用程序可能会崩溃。

因此,我必须在一个线程上创建EF数据库上下文并在该线程上运行所有查询 我已经使用了GUI线程,因为几乎所有查询都非常快。 但是,现在我的查询速度很慢,并希望在执行时显示动画进度条。

但是我不能这样做,因为如果我在不同的线程上运行查询,我的应用程序会崩溃。 此外,即使没有涉及SQL CE,如果我同时运行多个查询 ,EF似乎也会抱怨。 将所有查询移动到另一个线程,用疯狂的async / await,回调,锁和其他线程内容覆盖所有代码听起来也很可怕,因为我想在可能的情况下保持代码简单。

问题:在多线程GUI应用程序中使用EF数据库上下文和SQL Server Compact的正确方法是什么? 有没有办法将单个查询卸载到不同的线程而不会使整个应用程序异步,即有一种简单的方法吗?

SQL Server CE支持多线程。 但它的对象如SqlCeConnection或SqlCeTransaction不是线程安全的。 每个线程都应该使用单独的连接。 实体框架DataContext实例旨在持续一个工作单元(业务事务)。 建议是每个表单的上下文。

您可以使用DTO重新设计应用程序并存储/传输数据。 或者您可以使用实体框架的附加/分离功能( 此处此处 )。 或两者结合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM