我有一个ac#实体框架html" target="_blank">应用程序。我正在尝试从代码运行存储过程(没有问题)。它长期运行,大约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作业,然后在此之后通过调用数据库来监视日志。也许服务经纪人可能是一个考虑的选择?
对这种类型的问题我应该走什么路有什么想法?预先感谢斯科特
鉴于此数据的性质只是用户的一种状态,因此执行“读未提交”似乎很好。您可以尝试以下两个选项,这两个选项似乎都非常简单:
要尝试的第一件事是设置会话/连接属性:
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功能:
我通过上传同名文件并覆盖它来替换谷歌云存储桶中的数据。但是当我在Big query中查询该文件时,它仍然显示旧的数据。如何让Big Query重新获取文件并覆盖数据?
问题内容: 我试图在postgres 9.3上使用sql调用函数内的函数。 这个问题与我的另一篇文章有关。 我写了下面的函数。到目前为止,我还没有合并任何类型的save-output(COPY)语句,因此我试图通过创建嵌套函数print-out函数来解决此问题。 以上功能有效。 尝试创建嵌套函数。 调用嵌套函数。 输出 上面给出了这个。但是,当在print_out()中将arg1,arg2替换为’
@覆盖受保护的无效成功身份验证(HttpServletRequest请求、HttpServlet响应、FilterChain链、身份验证身份验证)抛出IOException、ServletException{ //响应。setHeader(“accessToken”,accessToken);//回答setHeader(“refreshToken”,refreshToken); 成功身份验证正在创
问题内容: 我有一个需要很多参数的插入存储过程-其中2个是@ FirstName,@ LastName。我还有一个更新存储过程,该过程需要许多参数-其中2个是@ FirstName,@ LastName。 我想做的是,从插入SP内部完成之后,调用更新SP并将其发送给@ FirstName,@ LastName。 我不知道这样做的正确语法;我试过了: 但我认为这是错误的。 有人可以告诉我怎么写这个电
问题内容: 我在任何地方都找不到此答案,但是可以从MySQL中的另一个存储过程调用存储过程吗?我想找回标识值,并在父存储过程中使用它。我们不能再使用FUNCTIONS! 问题答案: 参数应该可以帮助您将值返回给调用过程。基于此,解决方案必须是这样的。
数据访问层支持存储过程调用,调用数据库存储过程使用下面的方法: $resultSet = Db::query('call procedure_name'); foreach ($resultSet as $result) { } 存储过程返回的是一个数据集,如果你的存储过程不需要返回任何的数据,那么也可以使用execute方法: Db::execute('call procedure_name'