ASP.NET Core MVC 從入門到精通之資料庫

来源:https://www.cnblogs.com/hsiang/archive/2023/04/27/17354439.html
-Advertisement-
Play Games

隨著技術的發展,ASP.NET Core MVC也推出了好長時間,經過不斷的版本更新迭代,已經越來越完善,本系列文章主要講解ASP.NET Core MVC開發B/S系統過程中所涉及到的相關內容,適用於初學者,在校畢業生,或其他想從事ASP.NET Core MVC 系統開發的人員。 經過前幾篇文章... ...


隨著技術的發展,ASP.NET Core MVC也推出了好長時間,經過不斷的版本更新迭代,已經越來越完善,本系列文章主要講解ASP.NET Core MVC開發B/S系統過程中所涉及到的相關內容,適用於初學者,在校畢業生,或其他想從事ASP.NET Core MVC 系統開發的人員。 經過前幾篇文章的講解,初步瞭解ASP.NET Core MVC項目創建,啟動運行,以及命名約定,創建控制器,視圖,模型,接收參數,傳遞數據,路由,頁面佈局,wwwroot和客戶端庫,Razor語法等內容,今天繼續講解ASP.NET Core MVC 中EnityFrameworkCore資料庫等相關內容,僅供學習分享使用。

 

EntityFrameworkCore簡介

 

Entity Framework (EF) Core 是輕量化、可擴展、開源和跨平臺版的常用 Entity Framework 數據訪問技術。

EF Core 可用作對象關係映射程式 (O/RM),這可以實現以下兩點:

  • 使 .NET 開發人員能夠使用 .NET 對象處理資料庫。
  • 無需再像通常那樣編寫大部分數據訪問代碼。

 

創建資料庫

 

在ASP.NET Core MVC項目中,環境搭建常過有兩種模式:Code First和DB First,在本例中主要採用DB First模式,使用的資料庫為SQL Server 2012。首先創建資料庫,並命名稱MovieDB,然後創建數據表Movie,如下所示:

通過資料庫右鍵進行創建資料庫,創建表的語句如下所示:

 1 USE [MovieDB]
 2 GO
 3 
 4 /****** Object:  Table [dbo].[Movie]    Script Date: 2023/4/25 23:53:21 ******/
 5 SET ANSI_NULLS ON
 6 GO
 7 
 8 SET QUOTED_IDENTIFIER ON
 9 GO
10 
11 SET ANSI_PADDING ON
12 GO
13 
14 CREATE TABLE [dbo].[Movie](
15     [Id] [bigint] IDENTITY(1,1) NOT NULL,
16     [Name] [varchar](200) NULL,
17     [ReleaseDate] [datetime] NULL,
18     [LeadingRole] [varchar](100) NULL,
19     [Genre] [varchar](100) NULL,
20     [Price] [money] NULL,
21     [CreateTime] [datetime] NULL,
22     [CreateUser] [varchar](50) NULL,
23     [LastEditTime] [datetime] NULL,
24     [LastEditUser] [varchar](50) NULL,
25  CONSTRAINT [PK_Movie] PRIMARY KEY CLUSTERED 
26 (
27     [Id] ASC
28 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
29 ) ON [PRIMARY]
30 
31 GO
32 
33 SET ANSI_PADDING OFF
34 GO

 

構造測試數據

 

在測試應用之前,首先在數據表中插入2條測試數據,以便看到效果,如下所示:

 

 

創建數據實體

 

資料庫和數據表創建成功後,需要需要ASP.NET Core MVC項目中創建與數據表對應的實體類MovieEntity,如下所示:

 1 namespace DemoCoreMVC.Entities
 2 {
 3     /// <summary>
 4     /// 電影實體
 5     /// </summary>
 6     public class MovieEntity
 7     {
 8         /// <summary>
 9         /// 主鍵唯一標識
10         /// </summary>
11         public long Id { get; set; }
12 
13         /// <summary>
14         /// 電影名稱
15         /// </summary>
16         public string Name { get; set; }
17 
18         /// <summary>
19         /// 發行時間
20         /// </summary>
21         public DateTime ReleaseDate { get; set; }
22 
23         /// <summary>
24         /// 主角
25         /// </summary>
26         public string LeadingRole { get; set; }
27 
28         /// <summary>
29         /// 電影類型
30         /// </summary>
31         public string Genre { get; set; }
32 
33         /// <summary>
34         /// 票價格
35         /// </summary>
36         public decimal Price { get; set; }
37 
38         /// <summary>
39         /// 創建時間
40         /// </summary>
41         public DateTime CreateTime { get; set; }
42 
43         /// <summary>
44         /// 錄入人員
45         /// </summary>
46         public string CreateUser { get; set; }
47 
48         /// <summary>
49         /// 最後編輯時間
50         /// </summary>
51         public DateTime LastEditTime { get; set; }
52 
53         /// <summary>
54         /// 最後編輯人員
55         /// </summary>
56         public string LastEditUser { get; set; }
57     }
58 }

 

創建業務模型

 

實體用於和數據表進行映射,業務模型用於在控制器和視圖之間進行數據的交互,所以為了進行分層和數據隔離,需要創建模塊,在本例中模型為Movie,欄位名稱和Entity保持一致【也可以不一致】。如下所示:

 1 namespace DemoCoreMVC.Models
 2 {
 3     public class Movie
 4     {
 5         /// <summary>
 6         /// 主鍵唯一標識
 7         /// </summary>
 8         public long Id { get; set; }
 9 
10         /// <summary>
11         /// 電影名稱
12         /// </summary>
13         public string Name { get; set; }
14 
15         /// <summary>
16         /// 發行時間
17         /// </summary>
18         public DateTime ReleaseDate { get; set; }
19 
20         /// <summary>
21         /// 主角
22         /// </summary>
23         public string LeadingRole { get; set; }
24 
25         /// <summary>
26         /// 電影類型
27         /// </summary>
28         public string Genre { get; set; }
29 
30         /// <summary>
31         /// 票價格
32         /// </summary>
33         public decimal Price { get; set; }
34 35     }
36 }

 

安裝EntityFrameworkCore

 

在ASP.NET Core MVC項目中,我們使用EntityFrameworkCore操作資料庫,需要安裝依賴包,通過Nuget包管理器進行安裝,目前版本為7.0.5,如下所示:

 

配置SQL Server連接字元串

 

在appsettings.json中,增加資料庫連接字元串,配置ConnectionStrings節點,如下所示:

{
  "ConnectionStrings": {
    "Default": "Server=資料庫url;Database=MovieDb;User Id=資料庫賬號;Password=資料庫密碼;Trusted_Connection=True;;TrustServerCertificate=true;MultipleActiveResultSets=true"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}

 

創建DbContext

 

EntityFrameCore通過DbContext操作數據,需要創建屬於整個項目的數據上下文,並繼承於DbContext,如下所示:

 1 using DemoCoreMVC.Entities;
 2 using Microsoft.EntityFrameworkCore;
 3 
 4 namespace DemoCoreMVC
 5 {
 6     public class MovieDbContext:DbContext
 7     {
 8         public MovieDbContext(DbContextOptions<MovieDbContext> options)
 9             : base(options)
10         {
11         }
12 
13         public DbSet<MovieEntity> Movie { get; set; }
14 
15         protected override void OnModelCreating(ModelBuilder modelBuilder)
16         {
17             base.OnModelCreating(modelBuilder);
18             modelBuilder.Entity<MovieEntity>().ToTable("Movie");
19         }
20     }
21 }

註意:在OnModelCreating中,將實體和數據表進行映射。

 

註入EntityFrameworkCore框架

 

在Program.cs中註入框架,並將appSetting.json配置的資料庫連接字元串傳遞進去,如下所示:

 1 using DemoCoreMVC;
 2 using Microsoft.EntityFrameworkCore;
 3 
 4 var builder = WebApplication.CreateBuilder();
 5 
 6 //註入資料庫框架
 7 builder.Services.AddDbContext<MovieDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("Default")));
 8 
 9 // Add services to the container.
10 builder.Services.AddControllersWithViews();
11 var app = builder.Build();
12 
13 // Configure the HTTP request pipeline.
14 if (!app.Environment.IsDevelopment())
15 {
16     app.UseExceptionHandler("/Home/Error");
17     // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
18     app.UseHsts();
19 }
20 app.UseHttpsRedirection();
21 app.UseStaticFiles();
22 app.UseRouting();
23 app.UseAuthorization();
24 app.MapControllerRoute(
25     name: "default",
26     pattern: "{controller=Home}/{action=Index}/{id?}");
27 
28 app.Run();

 

創建控制器MovieController

 

在項目中,創建MovieController,在Index方法中查詢電影信息,並將數據傳遞給視圖,如下所示:

 1 using DemoCoreMVC.Models;
 2 using Microsoft.AspNetCore.Mvc;
 3 
 4 namespace DemoCoreMVC.Controllers
 5 {
 6     public class MovieController : Controller
 7     {
 8         private MovieDbContext movieDb;
 9 
10         public MovieController(MovieDbContext movieDb)
11         {
12             this.movieDb = movieDb;
13         }
14 
15         public IActionResult Index()
16         {
17             //1.獲取資料庫實體
18             var entities = movieDb.Movie.Skip(0).Take(20).ToList();
19             //2.將實體轉換成業務模型
20             var movies = entities.Select(e => new Movie()
21             {
22                 Id = e.Id,
23                 Name = e.Name,
24                 Genre = e.Genre,
25                 LeadingRole = e.LeadingRole,
26                 Price = e.Price,
27                 ReleaseDate = e.ReleaseDate,
28             }).ToList();
29             ViewData.Add("Movies",movies);
30             return View();
31         }
32     }
33 }

 

創建視圖Index.cshtml

 

視圖用於顯示電影列表,代碼如下所示:

 1 @{
 2     ViewData["Title"] = "Index";
 3     var movies = ViewData["Movies"] as List<Movie>;
 4 }
 5 
 6 <h1>Index</h1>
 7 <table class="table">
 8     <thead>
 9         <tr>
10             <td>序號</td>
11             <td>電影名稱</td>
12             <td>類型</td>
13             <td>主演</td>
14             <td>上映時間</td>
15             <td>票價</td>
16             <td>功能</td>
17         </tr>
18     </thead>
19 @for (var i = 0; i < movies.Count; i++)
20     {
21         var movie = movies[i];
22         <tr>
23         <td>@movie.Id</td>
24         <td>@movie.Name</td>
25         <td>@movie.Genre</td>
26         <td>@movie.LeadingRole</td>
27         <td>@movie.ReleaseDate</td>
28         <td>@movie.Price</td>
29         <td><a href="/Movie/Edit/@movie.Id">編輯</a> | <a href="/Movie/Delete/@movie.Id">刪除</a></td>
30     </tr>
31 }
32 </table>

 

運行測試

 

經過上述步驟,程式已經搭建完成,運行程式並輸入URL:https://localhost:7152/Movie,打開效果如下所示:

 

參考文章

 

本文主要參考文章如下:

資料庫故障排查:https://learn.microsoft.com/zh-cn/troubleshoot/sql/welcome-sql-server

ASP.NET Core MVC入門之資料庫:https://learn.microsoft.com/zh-cn/aspnet/core/tutorials/first-mvc-app/working-with-sql?view=aspnetcore-7.0&tabs=visual-studio

 

以上就是ASP.NET Core MVC從入門到精通之資料庫的全部內容,旨在拋磚引玉,一起學習,共同進步。


作者:小六公子
出處:http://www.cnblogs.com/hsiang/
本文版權歸作者和博客園共有,寫文不易,支持原創,歡迎轉載【點贊】,轉載請保留此段聲明,且在文章頁面明顯位置給出原文連接,謝謝。
關註個人公眾號,定時同步更新技術及職場文章


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

-Advertisement-
Play Games
更多相關文章
  • 1. 簡介 在go中,slice是一種動態數組類型,其底層實現中使用了數組。slice有以下特點: *slice本身並不是數組,它只是一個引用類型,包含了一個指向底層數組的指針,以及長度和容量。 *slice的長度可以動態擴展或縮減,通過append和copy操作可以增加或刪除slice中的元素。 ...
  • 三種初始化數據域的方法: 在構造器中設置值 在聲明中賦值 初始化塊(initialization block) 初始化塊 在一個類的聲明中,可以包含多個代碼塊。只要構造類的對象,這些塊就會被執行。 class Employee { private static int nextId; private ...
  • 現代的垃圾回收器為了低停頓的目標可謂將“併發”二字玩到極致,Shenandoah在G1基礎上做了非常多的優化來使回收階段並行,而ZGC直接採用了染色指針、NUMA等黑科技,目的都是為了讓Java開發者可以更多的將精力放在如何使用對象讓程式更好的運行,剩下的一切交給GC,我們所做的只需享受現代化GC技... ...
  • 教程簡介 Word 2010入門教程 - 從簡單的步驟入門Microsoft Office 2010,從基本到高級概念,包括探索視窗,後臺視圖,輸入文本,移動,打開,關閉文檔,上下文幫助,插入,選擇,刪除,移動測試,複製和粘貼,查找和替換,拼寫檢查,特殊符號,撤消更改,設置文本字體,文本修飾,更改測 ...
  • 教程簡介 WPF(Windows Presentation Foundation)是微軟推出的基於Windows 的用戶界面框架,屬於.NET Framework的一部分。它提供了統一的編程模型、語言和框架,真正做到了分離界面設計人員與開發人員的工作;同時它提供了全新的多媒體交互用戶圖形界面。 WP ...
  • SpringBoot 集成 SpringSecurity + MySQL + JWT 附源碼,廢話不多直接盤 SpringBoot已經為用戶採用預設配置,只需要引入pom依賴就能快速啟動Spring Security。 目的:驗證請求用戶的身份,提供安全訪問 優勢:基於Spring,配置方便,減少大 ...
  • 哈嘍大家好,我是鹹魚 之前寫了一篇關於文獻爬蟲的文章Python爬蟲實戰(5) | 爬取知網文獻信息 文章發佈之後有很多小伙伴給出了一些反饋和指正,在認真看了小伙伴們的留言之後,鹹魚對代碼進行了一些優化 優化的代碼在文末,歡迎各位小伙伴給出意見和指正 問題 pycharm 設置 Edge 驅動器的環 ...
  • 中間件基礎: 在.net6.0在請求在響應給請求者之前會通過請求管道再處理服務端的邏輯然後再響應給請求者,而請求管道則是由一系列中間件組成的有點類似於過濾器,為了更直觀的瞭解,我們請看下圖: 它可以決定是否將請求傳遞給請求管道中下一個中間件,也可以處理下一個中間件之前的邏輯也可以處理下一個中間件之後 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...