簡體   English   中英

ASP.NET 核心:如果數據庫未連接或不存在則處理異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM