gpt4 book ai didi

c# - Entity Framework + SQL Server Compact + WPF/WinForms = 缓慢的 UI?

转载 作者:太空狗 更新时间:2023-10-29 20:39:23 24 4
gpt4 key购买 nike

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

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

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

但我不能那样做,因为如果我在不同的线程上运行查询,我的应用程序会因 AV 而崩溃。此外,如果我同时运行多个查询,EF 似乎会提示,即使不涉及 SQL CE。将所有查询移动到不同的线程,用疯狂数量的异步/等待、回调、锁和其他线程内容覆盖所有代码听起来也很可怕,因为我希望尽可能保持代码简单。

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

最佳答案

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

您可以重新设计您的应用程序并使用 DTOs 存储/传输数据.或者您可以使用 Entity Framework 的附加/分离功能(herehere)。或者将两者结合起来。

关于c# - Entity Framework + SQL Server Compact + WPF/WinForms = 缓慢的 UI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22666472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com