在我的控制器中,我在保存到DB的日期之后执行另一个Void函数。但有时会出现这种错误:
在上一个异步操作完成之前,在此上下文上启动了第二个操作。使用“await”确保在该上下文上调用另一个方法之前已完成任何异步操作。任何实例成员都不能保证线程安全。
...下面是我的控制器示例:
public ActionResult All(Chapter chapter){
var x = db.Post.Where(p => p.PostID == chapter.PostID).FirstOrDefault();
if (x == null){return View(chapter);}
counter++;
db.Chapter.Add(chapter);
db.SaveChangesAsync();
savepost(chapter.PostID, counter);
return RedirectToAction("Index");
}
下面是Void方法:
public void savepost(int id,int counter)
{
var article = db.Post.Find(id);
article.LastUpdate = DateTime.Now;
article.ChapterCount = counter;
db.Entry(article).State = EntityState.Modified;
db.SaveChanges();
}
我怎么解决这个问题?
最短修复:
//db.SaveChangesAsync();
db.SaveChanges();
稍好的选择:
public async Task<ActionResult> All(Chapter chapter)
{
....
await db.SaveChangesAsync();
...
}
您没有等待对SaveChangesAsync()的调用,这意味着它将(可以)在单独的线程上被分叉。然后它会给你这个错误,DbContext不能在线程之间共享。
作为练习,您可以对SavePost()方法进行类似的更改:
消息: 代码: 我尝试的: 我不知道我做错了什么,我尝试了不同的方法,比如: 1. 2. 3. 我做错了什么?
在winform应用程序中使用EntityFrmework 6.2异步方法时,我遇到了一个问题。我们使用自定义类来管理基于单个活动设置的同步或异步EntityFrmework访问。当我们使用同步访问时,一切正常。当我们使用异步调用时,我们遇到了这个问题:在上一个异步操作完成之前,在此上下文上启动了第二个操作。使用“await”确保在该上下文上调用另一个方法之前已完成任何异步操作。任何实例成员都不能
我有一个循环,在循环中我正在做: 第二种方法使用EF获取实体,设置一些属性,并通过调用DbContext上的wait SaveChangesAsync()将实体保存回数据存储。 上面应该等待1s,然后继续第二种方法。通过上述实现,我得到以下异常: 在上一个异步操作完成之前,在此上下文上启动了第二个操作。使用“await”确保在该上下文上调用另一个方法之前已完成任何异步操作。任何实例成员都不能保证线
我试图将我的XSD验证为有效的XSD(与针对XML的验证相反),但我得到以下错误: XmlSchema错误:元素http://www.w3.org/2001/XMLSchema:简单类型在此上下文中无效。第6行,位置17。相关模式项SourceUri:虚拟://server/schema.xsd,第4行,位置12。 我一直在研究它,但我发现的一切都让我认为我的观点是正确的——所以这可能是一些明显而
我在两个独立的Web应用程序中工作,一个后台和前端应用程序。有趣的是,当我运行后端时,我没有任何问题。但在前端,我遇到了以下错误: 两者都在同一个Tomcat上运行。我的同事有相同的代码,它工作正常:-s
我刚开始使用Xamarin和VisualStudio2017在C#中为Android开发。与Windows生态系统完全不同的范例…Target是一个商业应用程序,将有特定的受众,但在我深入了解之前,我只是试图学习绳子,理解概念和程序… 因此,我从最简单的app开始,使用空白模板。这将创建一个项目,其中包含一个活动(mainactivity.cs)、两个资源(resources\layout\mai