[英]ASP.NET Core : handle exception if database is not connected or does not exist
我有這個小項目,我正在研究 ASP.NET 核心,我已經成功完成了它的 CRUD 操作部分。 現在我要做的是處理錯誤,其中之一是處理數據庫是否連接/存在。
PS:我的連接字符串工作正常,我可以使用它的所有 crud 操作。 我只想在數據庫被刪除或其他情況下給用戶一條消息。
這是我到目前為止所嘗試的:
public async Task<IActionResult> Index(DbContext context)
{
DbConnection conn = context.Database.GetDbConnection();
try
{
conn.Open();
ViewBag.Message = "Success connecting!";
return View("Index");
}
catch(Exception ex)
{
ViewBag.Message = "Error connecting!";
return View("Index");
}
}
另外我想我必須提到我的連接字符串是在appsettings.json
文件中設置的。
我是 ASP.NET 核心的新手,這就是我卡住的地方。 先感謝您。
ASP.NET 核心應用程序使用依賴注入進行配置。 可以使用 Startup.cs 的 ConfigureServices 方法中的 AddDbContext 將 EF Core 添加到此配置中。 例如:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddDbContext<ApplicationDbContext>(
options => options.UseSqlServer("name=ConnectionStrings:DefaultConnection"));
}
ApplicationDbContext class 必須公開帶有 DbContextOptions 參數的公共構造函數。 這就是將 AddDbContext 中的上下文配置傳遞給 DbContext 的方式。 例如:
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
ApplicationDbContext 然后可以通過構造函數注入在 ASP.NET 核心控制器或其他服務中使用。 例如:
public class MyController
{
private readonly ApplicationDbContext _context;
public MyController(ApplicationDbContext context)
{
_context = context;
}
}
通過 DBcontext 進行 CRUD 操作時,如果 CURD 操作執行成功,則表示數據庫連接成功,否則表示訪問/更新數據庫時出錯,則可以使用 Try-Catch 語句捕獲異常並返回特殊信息。
參考: https://docs.microsoft.com/en-us/ef/core/dbcontext-configuration/
如果您想在數據庫被刪除時向用戶發送消息等。 看演示:
成功:
假設數據庫連接失敗的場景:
1.在索引動作中添加代碼:
public async Task<IActionResult> Index()
{
try
{
_context.Database.GetDbConnection().Close();
_context.Database.GetDbConnection().Dispose();
var result = await _context.Movie.ToListAsync();
ViewBag.Message = "Success connecting!";
return View(result);
}
catch (Exception ex)
{
ViewBag.Message = "Error connecting!";
return View("Index");
}
}
2.將@ViewBag.Message
和@if (Model?.Count() > 0)
添加到您的索引視圖
@model IEnumerable<MvcMovie.Models.Movie>
@ViewBag.Message
...
@if (Model?.Count() > 0)
{
foreach (var item in Model) {
//contain your model item...
}
}
失敗:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.