學習ASP.NET Core Razor 編程系列六——資料庫初始化

来源:https://www.cnblogs.com/chillsrc/archive/2018/04/18/8872303.html
-Advertisement-
Play Games

學習ASP.NET Core Razor 編程系列目錄 學習ASP.NET Core Razor 編程系列一 學習ASP.NET Core Razor 編程系列二——添加一個實體 學習ASP.NET Core Razor 編程系列三——創建數據表及創建項目基本頁面 學習ASP.NET Core Ra ...


 學習ASP.NET Core Razor 編程系列目錄

學習ASP.NET Core Razor 編程系列一

學習ASP.NET Core Razor 編程系列二——添加一個實體

 學習ASP.NET Core Razor 編程系列三——創建數據表及創建項目基本頁面

學習ASP.NET Core Razor 編程系列四——Asp.Net Core Razor列表模板頁面

學習ASP.NET Core Razor 編程系列五——Asp.Net Core Razor新建模板頁面

 

       Asp.net Core EF創建的BookContext對象,就是用於處理資料庫連接和將Book實體對象映射到資料庫表(Book)記錄的功能。資料庫上下文(BookContext)是在startup.cs文件的configureservices方法中向依賴關係註入容器註冊,代碼如下:

public void ConfigureServices(IServiceCollection services)
        {

            services.AddDbContext<BookContext>(options =>options.UseSqlServer(Configuration.GetConnectionString("BookContext")));
            services.AddMvc();
        } 

          ASP.NET Core 配置系統會讀取資料庫連接字元串。 為了進行本地開發,它會從 appsettings.json 文件獲取資料庫連接字元串,資料庫連接配置如下:

  "ConnectionStrings": {
    "BookContext": "Server=.\\sqlexpress;Database=CustomDB;Trusted_Connection=True;MultipleActiveResultSets=true"

  }

          將應用程式部署到測試或生產伺服器時,可以修改Appsettings.json文件中上將配置,將資料庫連接字元串設置為真正的SQL伺服器。

          給資料庫添加初始數據

          在Visual Studio 2017的解決方案資源管理器中,使用滑鼠左鍵選中Models文件,然後點擊滑鼠右鍵,在彈出菜單中選擇創建一個新的類文件,命名為SeedData。用下麵的代碼替換生成的代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
 

namespace RazorMvcBooks.Models
{
    public class SeedData
    {
        public static void Initialize(IServiceProvider serviceProvider)
        {
            using (var context = new BookContext(                serviceProvider.GetRequiredService<DbContextOptions<BookContext>>()))
            {
                // Look for any Books.
                if (context.Book.Any())
                {
                    return;   // DB has been seeded
                }
 
                context.Book.AddRange(
                    new Book
                    {
                        Name = "Python編程 從入門到實踐",
                        ReleaseDate = DateTime.Parse("2018-1-12"),
                        Author = "埃里克·馬瑟斯",
                        Price = 75.99M
                    }, 

                    new Book
                    {
                        Name = "Java編程的邏輯",
                        ReleaseDate = DateTime.Parse("2018-1-13"),
                        Author = "馬俊昌",
                        Price = 48.99M
                    }, 

                    new Book
                    {
                        Name = "統計思維:大數據時代瞬間洞察因果的關鍵技能",
                        ReleaseDate = DateTime.Parse("2017-12-23"),
                        Author = "西內啟",
                        Price = 39.99M
                    }, 

                    new Book
                    {
                        Name = "微信營銷",
                        ReleaseDate = DateTime.Parse("2018-01-05"),
                        Author = "徐林海",
                        Price = 33.99M
                    }
                );
                context.SaveChanges();
            }
        } 
    }
}

        以下語句的作用是 如果資料庫中有Book表,數據初始化類將返回,不添加任何數據。

             // Look for any Books.
                if (context.Book.Any())
                {
                    return;   // DB has been seeded
                }

 

           添加SeedData.initializer方法

           在Visual Studio 2017的解決方案資源管理器中打開Program.cs文件,然後找到Main方法,在這個方法體的最後面添加SeedData.Initialize()方法,代碼如下:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.EntityFrameworkCore;
using RazorMvcBooks.Models; 

namespace RazorMvcBooks
{

    public class Program
    {
        public static void Main(string[] args)
        {
            // BuildWebHost(args).Run();
            var host = BuildWebHost(args);
            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;
                try
                {
                    var context = services.GetRequiredService<BookContext>();
                    // requires using Microsoft.EntityFrameworkCore;
                    context.Database.Migrate();
                    // Requires using RazorPagesMovie.Models;
                    SeedData.Initialize(services);
                }

                catch (Exception ex)
                {
                    var logger = services.GetRequiredService<ILogger<Program>>();
                    logger.LogError(ex, "資料庫數據初始化錯誤.");

                }
            }

            host.Run(); 

        } 

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
    }
}

測試應用程式

        第一步,刪除資料庫中的所有記錄。 可以在瀏覽器的書籍列表頁面中使用刪除鏈接,或可以在資料庫的SQL Server Management Studio中使用刪除指令刪除。在瀏覽器我們進行瀏覽,刪除之前與之後的界面如下圖。

 

 

          第二步,強制應用程式初始化(調用 Startup 類中的方法),這樣SeedData方法能夠正常運行。如果要強制初始化,必須先停止IIS,然後再重新啟動。您可以使用以下方法:

           1. 在通知區域中右鍵單擊IIS Express系統托盤圖標,在彈出菜單中使用滑鼠左鍵點擊“退出”或“停止站點。如下圖。

 

          2.  如果是在非調試模式下運行 Visual Studio 2017 ,請按 F5 以在調試模式下運行。

          3. 如果是在調試模式下運行 Visual Studio 2017 ,請先停止調試程式,並再按 F5。

             第三步,在瀏覽器中瀏覽我們添加到資料庫的初始化數據,如下圖。下圖1處,是原來的數據,圖2是我們應用程式初始化添加進行的數據。仔細觀察一下ReleaseDate與Price,可以發現有區別。

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文以一個簡單的小例子,介紹如何讓MessageBox彈出的對話框,在幾秒鐘內自動關閉。 ...
  • 相關閱讀:Windows + IIS 環境部署Asp.Net Core App 1. HTTP Error 502.5 – Process Failure 環境 Windows Server 2012, IIS 8, Asp.Net Core 2. 故障 App按正常流程發佈後通過瀏覽器訪問出現以下 ...
  • 前言 最近打算用.NET Core寫一份簡單的後臺系統,來練練手 然後又用到了Entity Framework Core 發現園子里有些文章講得不是那麼細節,對於新手小白來說,可能會有點懵。 特意整理了幾個細節. 正文 數據遷移 首先EF CORE跟以前的EF6是有不同點的, 微軟官網列出的不同點: ...
  • 什麼是AutoMapper? 簡單來說就是將一個對象映射到另一個對象的代碼。 擺脫了繁瑣的賦值過程 (最常見也就是Model -——ViewModel) AutoMapper安裝 我使用的是VS2015 可以在NuGet中直接輸入AutoMapper 去下載 也可以使用控制台命令 PM> Insta ...
  • 里氏轉換 之前匆匆忙忙學過里氏轉換,但是又忘了,今天寫下博客來記錄吧。 概念:1 可以將子類對象(派生類)賦值給父類(基類)對象 父類:Person person=new Child(); 例子: 上圖就是一個簡單例子:將字元串數組ABC通過分隔符“|”進行分割,結果如黑視窗所示。 重點:請看紅筆劃 ...
  • 控制器的激活預設情況下使用反射來實現的,這其中採用了DI,單例等設計模式。對於控制器的主要涉及到如下的類:ControllerBuilder、DefaultControllerFactory、DefaultControllerActivator(實現了IControllerActivator介面)、 ...
  • .net core經歷2.0版本之後,已經非常穩定,完全可以進行企業級開發並跨平臺部署到幾乎任何伺服器.個人測試效率是.net core是.net framework效率的3倍.其他語言沒有測試,等測試之後會發出來供大家參考. 目前.net core的更新速度還是非常快滴,目前已經更新到了2.1,感 ...
  • 最近開始做UWP開發,圖省事兒就把自己之前一個Winform項目的一部分代碼拷貝到了新寫的UWP項目中來。整齣了一些么蛾子,下麵做一個記錄。 首先提一個重點就是:UWP里關於文件的操作儘量用StorageFile類來搞!!!!!!!!!!!! 1.UWP的文件選取 UWP的文件選取使用的是FileO ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...