這一章節中,我們開始認識一下MVC中的M,也就是Model。
Entity Framework Core是微軟提供給開發者的一個ORM框架,類似java中的MyBatis和Hibernate。將Plain Old CLR Objects(POCO)類可以直接轉換爲數據庫中的增刪改查的操作代碼,減少重複開發代碼量。
POCO
這種類是隻有屬性沒有方法的類,純粹表示數據,可以用於和數據庫之間的映射。
EF Core庫只要求我們寫POCO類,然後該庫就可以根據這些類自動在數據庫中建立對應的表,以及相關的增刪改查。
新建model
Movie.cs
using System;
using System.ComponentModel.DataAnnotations;
namespace MvcMovie.Models
{
public class Movie
{
public int Id { get; set; }
public string Title { get; set; }
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
}
}
安裝EFCore SqlProvider
示例選用SqlServer Local數據庫,專門用於開發環境的sql server數據庫,因此需要安裝EFcore庫需要用到的sqlServer的Provider庫,
選中Tools工具>NuGet 包管理器 > 程序包管理器控制檯 (PMC).
Install-Package Microsoft.EntityFrameworkCore.SqlServer
在安裝provider的時候,因爲依賴,所以也會自動安裝EFCore庫。
創建數據庫上下文
所謂數據庫上下文,就是告訴EFCore,我們需要通過什麼類建立表數據,以及對該類在表中的增刪改查。
創建Data文件夾,添加MvcMovieContext.cs,添加代碼。
using Microsoft.EntityFrameworkCore;
using MvcMovie.Models;
namespace MvcMovie.Data
{
public class MvcMovieContext : DbContext
{
public MvcMovieContext (DbContextOptions<MvcMovieContext> options)
: base(options)
{
}
public DbSet<Movie> Movie { get; set; }
}
}
EFCore需要的上下文都需要以 DbContext作爲基類,DbSet表示一個集合,對應數據庫中的一張表,其中的實體對象則對應一行記錄。這裏Movie爲DbSet類型,所以表名爲Movie,DbSet中存儲的是Movie即我們自定義的類型,對應一行記錄的結構。
註冊數據庫上下文
ASP.net core基本使用了依賴注入的技術思想。EFCore DBContext作爲一種服務需要註冊進去才能使用。 在Startup.cs中進行註冊,添加如下2行代碼
using MvcMovie.Data;
using Microsoft.EntityFrameworkCore;
然後在ConfigureServices中添加一行代碼,如下斜體,
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
*
services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MvcMovieContext")));*
}
Configuration.GetConnectionString("MvcMovieContext")是從文件appsettings.json中獲取數據庫連接字符串。
在appsettings.json中添加一個key:value
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-1;Trusted_Connection=True;MultipleActiveResultSets=true"
}
搭建基架
這是一個專門用於對一組經常關聯在一起的開發步驟進行整體創建的工具。比如創建一個模型,會隨後創建控制器,一般都會要有增刪改查以及對應視圖這些開發操作,通過這個功能,就可以一步搭建完畢。無需重複勞動。
右鍵Controllers選擇添加>新搭建基架項目,選擇Entity FrameWork的MVC。
彈出對話框選擇Model class,上下文選擇MvcMovieContext,其他都是默認即可。
然後基架工具會創建兩類東西:
1. Controller: Controllers/MoviesController.cs
2. View:Views/Movies/*.cshtml (Create, Delete, Details, Edit, and Index)
也就是說,通過Model和MvcMoviewContext上下文,就把MVC中剩下的VC兩樣代碼全都自動創建完成了。這個過程,微軟給出的英文是scaffolding
數據庫
MVC都準備好了,接下來就是把數據庫創建了,以及對應表創建完成。這個操作,叫做Initial migration。中文翻譯的話,應該叫初始化遷移。
migration是EF core的一個功能。用於將Model通過DBContext上下文映射到數據庫,並且同步數據庫中的表結構。
在程序包管理器控制檯 (PMC).中執行如下
Add-Migration InitialCreate
Update-Database
第一行執行,會根據mvcDBContext生成一個Migrations/{timestamp}_InitialCreate.cs文件。
第二句執行,則會執行Migrations/{time-stamp}_InitialCreate.cs文件中的up方法。
完成
到現在。新建一個MVC以及對應數據庫的過程就完成了。 運行一下,然後通過http://localhost:59191/Movies 來訪問。