- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我目前正在开发一项服务。服务关闭的时间有限(4 秒)。
我有一个关闭程序,这也会通过 EF6 将一些次要数据推送到 sql 数据库。
...
关机!
Step1(停止正常运行)
step2 将一些关机数据推送到数据库
step3 最后关机,处理所有等
该应用程序有多个上下文和一个以重试大约一分钟的方式设置的执行策略。我想保持这种状态。
现在可能会发生数据库已关闭 - 因此,由于执行策略,对数据库的调用需要很长时间,最多 1 分钟。
这已经超过 4 秒了,所以我希望可以选择立即停止操作。我不能要求更多的时间。
到目前为止,我已经尝试了 SaveChangesAsync(cancellationToken);但这仍然会继续执行一分钟,取消 token 不会执行任何操作。然后,我尝试使用第二个 Task 在上下文中调用 dispose,关闭连接等。这有时似乎可行,但在其他情况下,这仍然会等待一分钟才能引发异常。
var timeoutTask = Task.Run(() =>
{
while (true)
{
if (cancellationToken.IsCancellationRequested)
{
context.Database.Connection.Close();
Debug.WriteLine($"{DateTime.Now:G} {nameof(cancellationToken)} token is canceled!");
using(context) { }
return;
}
Task.Delay(10, timeoutTaskTokenSource.Token).Wait(timeoutTaskTokenSource.Token);
timeoutTaskTokenSource.Token.ThrowIfCancellationRequested();
}
}, cancellationToken);
现在我正在考虑创建一个线程并中止它,但是我希望我能找到一个更明智的解决方案。
编辑:
连接超时在连接字符串中设置:
Data Source=localhost;Initial Catalog=MyDb;Integrated Security=False;User ID=someuser;Password=somepassword;MultipleActiveResultSets=True;Connect Timeout=1;Application ame=somename;ConnectRetryCount=0;ConnectRetryInterval=1
命令超时也设置为 1。
最佳答案
如果数据库不可用,您可以使用 Connection Timeout您的连接字符串的属性。这将在延迟后中止连接尝试。
如果你想中止一个命令,你可以使用 CommandTimeout属性(property)。
context.Database.CommandTimeout = 5;
关于c# - 如何立即停止正在运行的 DbContext.SaveChanges(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56337604/
我一直想知道的一个问题是,我应该显式调用 context.SaveChanges() 还是让它在 Dispose() 下。 方法 1:自动保存 public virtual void Disp
我正在使用EF5和“数据库优先”方法在WPF中编写第一个MVVM应用程序。 我在MVVM中的模型是EF5为我生成的(我确实需要自定义T4模板以包括INotifyPropertyChanged)。 一切
我使用 Visual Studio 在 ASP.NET MVC 项目中处理本地数据库。 我在修改数据库时遇到问题。当我调用 SaveChanges() 时,我总是会收到此错误: The value c
我正在使用 Entity Framework 同时插入对象,如下所示。 context = new MyContext(); foreach (var x in lstX) { var abc
我在 ObjectSet 中添加数据并在 ObjectContext 上执行了 SaveChanges。但是新数据没有显示在 DataGrid 中! 代码: bsWork.DataSource = P
我正在使用 Oracle 数据库和 ASP.net MVC4 创建一个应用程序。即使在代码中看起来没有问题,调用 SaveChanges()方法导致此处显示的错误: 这张图片显示了内部异常和相关细节
我刚开始使用 Entity Framework ,我能够使用 linq 进行选择操作,但我在插入时遇到了问题。我试过这个示例,看看有什么问题: testEntities te = ne
假设我在 Controller 中调用了这样的东西: using (var context = new SqlContext()) { context.Items.Add(new Item("
我的 Asp.net mvc web 应用程序中有以下 Action 方法:- [HttpPost] [ValidateAntiForgeryToken] public ActionResult Cr
目标框架:netstandard2.0 Entity Framework 核心:2.2.6 我在 OnModelCreating 中有以下代码: protected override void OnM
这个问题在这里已经有了答案: DbContext SaveChanges Order of Statement Execution (1 个回答) 7年前关闭。 当上下文包含相关实体和 SaveCha
我有一个使用 Entity Framework 6.1、代码优先创建的 SQL-Azure 数据库。 我的“EmazeEvents”表中的“日期时间”字段是这样创建的: datetime = c.Da
查看人们编写的示例,我发现很多人使用 SaveChanges 而不是使用 SaveChangesWithRetries。我认为 SaveChangesWithRetries 是最好的选择,那么仅使用
RavenDB 遇到一个奇怪的问题 public ActionResult Save(RandomModel model) { //Do some stuff, validate model etc.
有没有办法保存单个跟踪对象的更改,而不是 ObjectStateManager 中的所有对象,我的意思是: ObjectContext.SaveChanges(Contact) 最佳答案 也许您可以创
查看人们编写的示例,我发现很多人使用 SaveChanges 而不是使用 SaveChangesWithRetries。我认为 SaveChangesWithRetries 是最好的选择,那么仅使用
我正在尝试编写一个生成多张发票的方法。这是一所大学,其中客户在名为 Enrollments 的类(class)中与导师一起注册。通过这种方法,我试图将导师客户的月费乘以他们的佣金百分比,因为导师从
为什么 DbContext ctx 在每次 SaveChanges() 执行后处理得更快? 第一个样本: var ctx = new DomainContext(); foreach (var ite
我一直在玩 Entity Core 类,例如 DbContext,在尝试保存对象时遇到以下错误: An error occurred while saving entities that do not
场景如下 - 不同的用户通过从网页的下拉列表中选择一个值来进行更改。下拉列表包含在 DataView 中或通过构建表格。如果用户 A 对第 1 行进行了更改,它会更新数据库并在重新绑定(bind)后显
我是一名优秀的程序员,十分优秀!