从存储过程刷新数据

2023-12-08

我有一个 C# 实体框架应用程序。 我正在尝试从代码运行存储过程(没问题)。运行时间较长,大约 30 分钟。随着流程的进行,我将每个事务的日志写入 SQL 表。 我希望从应用程序启动该过程,然后在屏幕上显示登录的最后 10 条记录,可能每 10 秒重新查询一次。这将显示进展情况。

 private void Window_Loaded_1(object sender, RoutedEventArgs e)
    {
        Task.Run(() => _serviceProduct.RefreshAllAsync());

        _cvsLog = (CollectionViewSource)(FindResource("cvsLog"));
        var dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
        dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
        dispatcherTimer.Interval = TimeSpan.FromSeconds(10);
        dispatcherTimer.Start();
    }


 private void dispatcherTimer_Tick(object sender, EventArgs e)
    {
        _cvsLog.Source = _serviceProduct.GetRefreshLog();
    }

我修改了代码以简化。线程阻塞在dispatcherTime_Tick进程上。看起来存储过程很好。

这是被调用的服务。

 public ObservableCollection<RefreshLog> GetRefreshLog()
    {
        using (var db = new HiggidyPiesEntities())
        {
            var recs = (from x in db.RefreshLogs orderby x.LG_ID descending select x).Take(30);
            var obs = new ObservableCollection<RefreshLog>(recs);
            return obs;
        }
    }

我一直在后台工作线程和 task.run 中运行,但该过程一直阻塞线程。

我什至想过从代码启动 SQL 作业,然后通过调用数据库来监视日志。 也许服务经纪人可能是一个值得考虑的选择?

对于此类问题我应该走哪条路? 预先感谢斯科特


鉴于此数据的性质只是用户的一种状态,因此 READ UNCOMMITTED 似乎没问题。您可以尝试这两个选项,这两个选项看起来都相当简单:

首先要尝试的是设置会话/连接属性:

public ObservableCollection<RefreshLog> GetRefreshLog()
{
   using (var db = new HiggidyPiesEntities())
   {
      db.context.ExecuteStoreCommand("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;");
      var recs = (from x in db.RefreshLogs orderby x.LG_ID descending select x).Take(30);
      var obs = new ObservableCollection<RefreshLog>(recs);
      return obs;
   }
}

第二件事是通过 EF 设置事务隔离级别:

public ObservableCollection<RefreshLog> GetRefreshLog()
{

   using (var scope = new TransactionScope(TransactionScopeOption.Required,
             new TransactionOptions() {
                 IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted
             }))
   {
      ObservableCollection<RefreshLog> obs;

      using (var db = new HiggidyPiesEntities())
      {
         var recs =
              (from x in db.RefreshLogs orderby x.LG_ID descending select x).Take(30);
         obs = new ObservableCollection<RefreshLog>(recs);
      }

      scope.Complete();
      return obs;
   }

}

这两个想法都取自关于这个问题的各种答案:带有 NOLOCK 的实体框架。第一个建议基于 Frank.Germain 的答案,第二个建议基于 Alexandre 的答案。

为了将其作为一个选项提及,您可能需要研究一下 SQL Server 2005 中引入的 SNAPSHOT ISOLATION 功能:

  • SQL Server 中的快照隔离
  • 更改数据库设置选项(搜索字符串“snapshot_is”)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从存储过程刷新数据 的相关文章

随机推荐

  • 您的 BDD 规范是否应该与 UI 测试分开?

    昨天我参加了一场精彩的演讲戈伊科 阿季奇关于 BDD 我可能错过了他说的一两件事 所以这里有一个问题希望能为我澄清一些事情 通常 当您在网上看到 BDD 示例时 它们会在 UI 中包含步骤 在小黄瓜语言中 您经常可以看到类似以下内容 Sce
  • Android Web 视图中的所见即所得

    我一直在尝试从我的应用程序内部向我的用户提供所见即所得的 HTML 编辑器 它不必是花哨的所见即所得 我只需要基本功能 如粗体 斜体 下划线 图像 链接和一些基本格式 字体大小 颜色 对齐方式 那应该足够了 完美的解决方案是一个开源库 但我
  • Angular 4:API调用后更新模板变量[重复]

    这个问题在这里已经有答案了 我有一个组件指令 用于显示带有一些信息的 div 该组件称为站点组件并包含在页面中 该人的主要行为站点组件很好 除了这个 我有一个对后端的 API 调用 我在其中返回一些数据 后端调用执行良好 我收到了信息 但变
  • 在内联汇编中使用双精度数字(GCC、IA-32)

    我刚刚开始在计算机科学课上学习汇编 并且我有一项作业是使用指定的舍入模式对浮点值进行舍入 我尝试使用它来实现fstcw fldcw and frndint 我修改舍入控制位 对数字进行舍入 然后恢复以前的控制位 分配的要求 目前突出的问题是
  • 为什么协程停止工作/执行

    我有一个 3 秒倒计时器 当游戏取消暂停时会激活该计时器 几天前我还可以正常工作 但现在它不再工作了 它在号码 3 上被阻止 这是代码 IEnumerator Timer Time timeScale 0 objectWithGSScrip
  • 如何有效地使用绑定框架

    我已经使用绑定框架有一段时间了 我想知道您如何处理这种情况 你有一份报纸 它有一些属性 比如 字符串 标题 布尔值 已发布 日期 出版日期 在您看来 您有一份报纸列表 可以同时编辑所有报纸 这意味着您可以在单个请求中更改所有报纸的标题或所有
  • 实体框架在哪里存储属性名称与其在 SQL 中选择的列之间的映射?

    我正在尝试使用 ObjectQuery 的 ToTraceString 在 EF 4 3 上构建一些自定义扩展 以从 LINQ 代码生成原始 SQL 我注意到 虽然在某些情况下 SQL 中的列名称与查询元素类型的属性名称相匹配 但在其他情况
  • 为什么代码 this 指向 window 对象?

    我的代码是 var length 20 function fn console log this length var o length 10 e function fn fn arguments 0 o e fn 输出是20 1 谁能告诉
  • 所有浏览器都会忽略无名输入字段吗?

    如果没有指定 name 属性 是否可以保证浏览器不会发送输入元素 例如 我们可以假设 POST 下面的表单不会发送信用卡号吗
  • NullPointerException:重写派生类中基类的构造函数调用方法

    我有这个代码片段 class Base public Base method void method System out println In Base class Derived extends Base private String
  • 用于处理多个未知回调的 JavaScript 函数

    我有一个场景 我想将 2 个或更多函数 作为参数 发送到处理函数中 并让该处理函数执行每个传递的函数作为前面函数的回调函数 这是我试图编写的函数的一般概念 function functionChain MAKE SURE WE HAVE A
  • 为什么此 DataAdapter 不将行插入数据库?

    因此 我遇到了一种情况 我使用 SqlDataAdapter 将行插入 SQL Server 2014 数据库中的表中 数据来源是 Excel 电子表格 当使用几个 For 循环以及 Columns Add 和 Rows Add 填充 Da
  • PHP Amazon S3通过URL访问私有文件

    我在用着AWS PHPsdk 将图像保存在 S3 上 文件以私密方式保存 然后 我在 Web 应用程序中使用 S3 文件 url 显示图像缩略图 但由于文件是私有的 因此图像显示为损坏 当用户单击文件名时 会打开一个模式以显示较大尺寸的文件
  • kivy自定义小部件绑定错误

    我正在尝试制作一个小俄罗斯方块游戏 用于用 kivy 学习 python 我正在尝试创建一个大小为 20 20 的自定义小部件 当我将其添加到浮动布局并运行以下代码时 我收到以下错误 Error File D OS Files worksp
  • 是否可以动态定义 _Generic 的关联列表?

    我有一个这样的模板 template h Declare a function func type void JOIN func T T t return undef T 我这样使用它来为不同类型生成相同的函数 example c defi
  • 将 powershell 控制台窗口移动到屏幕左侧的最佳方法是什么?

    尝试使用 PowerShell 脚本将当前活动的 powershell 窗口移动到屏幕左侧 我找到了这个功能 但它并没有真正提供任何示例 有趣又有趣的问题 如果你想移动窗口 你需要知道窗口句柄hWnd它的 对于控制台 您可以使用GetCon
  • 当工作表受到保护时,宏不起作用。运行宏返回运行时错误 1004

    我的工作簿中有三个工作正常的宏 但是 当我保护任何工作表时 它们会停止工作 并且我会得到一个run time error 1004 我尝试按照网上找到的两个建议进行操作 在宏代码开始处取消保护 在宏代码结束处保护 仅用户界面 但运行时错误仍
  • 在 Mathematica 中以编程方式创建多元函数

    这是从讨论中分离出来的earlier问题 假设我需要定义一个函数 f 来检查给定的图形标签是否是正确的着色 换句话说 我们为每个节点分配了一个整数 并且没有两个相邻节点得到相同的答案 例如 对于 Path 3 f 1 2 3 返回 True
  • 如何在 php 中设置迭代表的替代行颜色?

    我正在使用 PHP 并且正在迭代一个带有结果数组的表 我想向其中添加行颜色和备用行颜色 如何操作 任何建议 table cellpadding 0 cellspacing 2 width 100 class table Style Bord
  • 从存储过程刷新数据

    我有一个 C 实体框架应用程序 我正在尝试从代码运行存储过程 没问题 运行时间较长 大约 30 分钟 随着流程的进行 我将每个事务的日志写入 SQL 表 我希望从应用程序启动该过程 然后在屏幕上显示登录的最后 10 条记录 可能每 10 秒