0
我正在编写一个MVC5互联网应用程序,并使用EF6。EF6 - 已经有一个开放的DataReader与这个命令相关联,必须先关闭
我有一个Edit
ActionResult
当编辑Asset
对象时调用。当编辑Asset
对象时,我还需要更新其他对象值。 UpdateAssociatedAssetObjects
函数执行此操作。
我收到以下错误:
There is already an open DataReader associated with this Command which must be closed first.
在UpdateAssociatedAssetObjects
功能,在下面的代码行:
if (item.mapMarker.Id == asset.Id)
这里是Edit ActionResult
:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit(AssetViewModel assetViewModel)
{
if (ModelState.IsValid)
{
db.Entry(assetViewModel.asset).State = EntityState.Modified;
assetViewModel.asset.lastUpdate = DateTime.Now;
if (assetViewModel.asset.linkFromExternalResource)
{
assetViewModel.asset.webAddress = assetViewModel.webAddress;
}
else
{
assetViewModel.asset.webAddress = assetViewModel.filename;
}
db.Entry(assetViewModel.asset).Property(uco => uco.creationDate).IsModified = false;
db.Entry(assetViewModel.asset).Property(uco => uco.userName).IsModified = false;
assetService.UpdateAssociatedAssetObjects(db, assetViewModel.asset);
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(assetViewModel);
}
这里是UpdateAssociatedAssetObjects
功能:
public void UpdateAssociatedAssetObjects(CanFindLocationDatabaseContext db, Asset asset)
{
foreach (var item in db.mapLocations)
{
if (item.mapMarker.Id == asset.Id)
{
item.lastUpdate = DateTime.Now;
}
}
}
我可以请这个代码帮忙吗?
我试过在await db.SaveChangesAsync()
之后放置了UpdateAssociatedAssetObjects
函数,并且使用了新的数据库上下文对象,但仍然出现错误。
在此先感谢
连接字符串是什么样的? – 2014-09-19 09:47:10
连接字符串全部正常。对象正在成功添加和删除。你认为问题会出现在连接字符串中吗? – user3736648 2014-09-19 10:42:26
也许,这就是为什么我问:) – 2014-09-19 11:04:07