隨著技術的發展,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/
本文版權歸作者和博客園共有,寫文不易,支持原創,歡迎轉載【點贊】,轉載請保留此段聲明,且在文章頁面明顯位置給出原文連接,謝謝。
關註個人公眾號,定時同步更新技術及職場文章