【发布时间】:2019-04-05 21:27:37
【问题描述】:
我编写了一个简单的应用程序,当我导航到我的编辑页面时,会弹出以下错误。
Microsoft.EntityFrameworkCore.Query[10100]
迭代上下文类型“app.Models.ApplicationDbContext”的查询结果时发生异常。
System.ObjectDisposedException:无法访问已处置的对象。此错误的一个常见原因是释放从依赖注入中解析的上下文,然后尝试在应用程序的其他地方使用相同的上下文实例。如果您在上下文上调用 Dispose() 或将上下文包装在 using 语句中,则可能会发生这种情况。如果你使用依赖注入,你应该让依赖注入容器负责处理上下文实例。
似乎 EF 提供了我无法理解的有用信息。这个错误的棘手部分是它在我导航到编辑页面时随机发生。有时它可以工作,有时它无法在Edit.cshtml 上加载某些属性,但仍然可以工作,有时应用程序会在我的控制台中因提供的错误而崩溃。另一个奇怪的事情是它不会产生任何500 或5xx 错误。它只是简单地崩溃并停止应用程序。
这是我的Edit.cshtml 内容:
@page
@model EditModel
@{
ViewData["Title"] = "Edit Book";
}
<h2>Edit Book</h2>
<div class="row justify-content-center">
<div class="col-md-6">
<form method="post" class="form-border">
<div asp-validation-summary="All" class="validation-container alert alert-danger"></div>
<div class="form-group">
<label asp-for="Book.Name"></label>
<input asp-for="Book.Name" class="form-control" />
<span class="form-text text-danger" asp-validation-for="Book.Name"></span>
</div>
<div class="form-group">
<label asp-for="Book.Description"></label>
<input asp-for="Book.Description" class="form-control" />
</div>
<div class="form-group">
<label asp-for="Book.Author"></label>
<input asp-for="Book.Author" class="form-control" />
</div>
<input asp-for="Book.Id" type="hidden">
<button type="submit" class="btn btn-primary">Update</button>
<a asp-page="Index" class="btn btn-success">Back To List</a>
</form>
</div>
</div>
这是我的Edit.cshtm.cs OnGet 方法:
public async void OnGet(int id)
{
Book = await _db.Books.SingleOrDefaultAsync(x => x.Id == id);
if(Book == null)
{
RedirectToPage("Index");
}
}
我正在使用.Net Core 2.2.104
另外,当我运行命令dotnet ef --version 时,它会生成Entity Framework Core .NET Command-line Tools
2.2.2-servicing-10034
【问题讨论】:
-
阅读此article
标签: .net entity-framework .net-core entity-framework-core