2012-12-26 17 views
1

我想重写我的程序,该程序当前在WinForms上使用DataSets并将其移至WPF。 目前该程序使用Citrix为用户登录。 现在,当某人正在对数据执行某种操作时,主线程正在对变更提交BI并将其发送回服务器,或从服务器获取新数据(或修改数据)并将其添加到缓存中。 今天的问题是每次用户正在处理数据或从服务器收到消息时,锁的广泛使用和解锁。 我正在寻找一个数据实体或某种方式来在我的客户端工作多线程。 这意味着我希望每个线程都能够在数据上提交BI,并在与所有其他用户及其更改同步的同时与服务器通信。多线程数据实体

我看着EF,但它不是线程安全的意义时更新将我需要的时候用户处理数据的EF里面锁住我的EF和更新,并再次到达服务器。

有没有办法更容易地做到这一点,而无需让程序员每次锁定/解锁数据?

回答

2

如果您正在创建多线程应用程序,则无法避免锁定。

这里是你可以同时使用EF申请几件事:

  1. 不要使用锁独特的背景下(无单例模式)。
  2. 为每个请求和一些并发实例化和配置一个上下文 控制系统
  3. 尽可能避免锁定上下文。
+0

我的问题是,我想避免需要每次有更新时锁住我的EF。 说我只在我的客户端,它运行多个用户,每个用户在他自己的线程。 我的GUI线程是一个。 说用户A正在观看网格内的数据A1,而用户B正在编辑相同的数据。 每次有人更新我不会遇到异常的数据时,如何在不使用锁的情况下轻松确定? 在这个过程中没有涉及数据库,我只是希望更新将发布给其他用户。 –