下麵通過實例來學習EF Core Code First,也就是通過EF Core遷移來完成從模型生成資料庫。 本實例使用EntityFrameworkCore SQLite 資料庫進行介紹,大家也可以無縫切換到其他資料庫。 目前 EF Core 支持的資料庫: Microsoft SQL Serve ...
下麵通過實例來學習EF Core Code First,也就是通過EF Core遷移來完成從模型生成資料庫。
本實例使用EntityFrameworkCore SQLite 資料庫進行介紹,大家也可以無縫切換到其他資料庫。
目前 EF Core 支持的資料庫:
- Microsoft SQL Server
- SQLite
- Postgres (Npgsql)
- SQL Server Compact Edition
- InMemory (for testing purposes)
- MySQL
- IBM DB2
1.新建項目
新建項目,選擇.NET Core,然後選擇ASP.NET Core Web Application (.NET Core),將其命名為EFCoreDemo,如下圖所示。
單擊“確定”按鈕以後,出現選擇模板對話框;選擇Web應用程式模板,並將“身份驗證”設置為“不進行身份驗證”,如下圖所示。
2.引用Entity Framework Core
在NuGet命令行下安裝引用:
Install-Package Microsoft.EntityFrameworkCore.Sqlite
也可以使用NuGet包在管理器中搜索Microsoft.EntityFrameworkCore.Sqlite來安裝。
3.創建實體
在項目中添加一個Models文件夾,然後在Models文件夾通過右鍵快捷菜單新建一個類User.cs:
public class User { public int Id { get; set; } public string UserName { get; set; } public string Password { get; set; } }
繼續新建一個類DataContext.cs:
public class DataContext : DbContext { public DataContext(DbContextOptions<DataContext> options) : base(options) { } public DbSet<User> Users { get; set; } }
4.創建資料庫
打開Startup.cs,在ConfigureServices方法中添加如下代碼:
public void ConfigureServices(IServiceCollection services) { var connection = "Filename=./efcoredemo.db"; services.AddDbContext<DataContext>(options => options.UseSqlite(connection)); // Add framework services. services.AddMvc(); }
需要 using Microsoft.EntityFrameworkCore;
添加好以後,接著來安裝引用Microsoft.EntityFrameworkCore.Tools。使用NuGet命令行:
Install-Package Microsoft.EntityFrameworkCore.Tools
下麵開始創建資料庫,這裡在程式包管理控制台執行命令進行遷移及更新。
打開VS 2017菜單 工具→NuGet包管理器→程式包管理控制台。
首先輸入Add-Migration MyFirstMigration執行,接著輸入Update-Database執行。出現Done.表示成功創建資料庫。
如果需要使用dotnet ef 命令,首先打開EFCoreDemo.csproj 文件編輯,在Project節點中添加如下
<ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" /> </ItemGroup>
如果是在VS中編輯則會自動還原,外面編輯需要手動dotnet restore。
還原好以後就可以使用dotnet ef 命令。
在命令提示符中首先輸入dotnet ef migrations add MyFirstMigration,然後再輸入dotnet ef database update。
出現成功的提示,這樣我們就創建好了資料庫,如下圖所示。更多EF命令介紹請輸入dotnet ef -h。
5.項目使用
在Controllers文件夾上右擊,在彈出的右鍵快捷菜單中單擊“添加”→“新建項”,新建一個MVC控制器類UserController:
UserController.cs
public class UserController : Controller { private DataContext _context; public UserController(DataContext context) { _context = context; } // GET: /<controller>/ public IActionResult Index() { return View(_context.Users.ToList()); } public IActionResult Register() { return View(); } [HttpPost] [ValidateAntiForgeryToken] public IActionResult Register(User registeruser) { if (ModelState.IsValid) { _context.Users.Add(registeruser); _context.SaveChanges(); return RedirectToAction("Index"); } return View(registeruser); } }
你會註意到控制器需要DataContext作為構造函數的參數。ASP.NET Core依賴註入將通過構造函數註入DataContext到控制器。
Index action顯示所有用戶,Register action註冊用戶是將用戶添加至用戶表。
然後在Views文件夾中添加一個User文件夾,然後添加一個Index視圖:
Index.cshtml
@model IEnumerable<EFCoreDemo.Models.User> @{ ViewBag.Title = "用戶"; } <table class="table"> <tr> <th>Id</th> <th>用戶名</th> </tr> @foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.Id) </td> <td> @Html.DisplayFor(modelItem => item.UserName) </td> </tr> } </table>
接下來再添加一個 Register視圖。
@model EFCoreDemo.Models.User @{ ViewBag.Title = "用戶添加"; } <form asp-controller="User" asp-action="Register" method="post"> <div class="form-group"> <label asp-for="UserName" class="col-md-2 control-label">用戶名:</label> <div class="col-md-10"> <input class="form-control" asp-for="UserName" /> <span asp-validation-for="UserName" class="text-danger"></span> </div> <label asp-for="Password" class="col-md-2 control-label">密碼:</label> <div class="col-md-10"> <input class="form-control" asp-for="Password" /> <span asp-validation-for="Password" class="text-danger"></span> </div> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="保存" class="btn btn-default" /> </div> </div> </form>
在調試那裡選擇EFCoreDemo啟動,最後程式運行起來,在地址欄輸入http://localhost:5000/User/Register訪問註冊。
在註冊那裡填入用戶信息。註冊成功後將跳轉至http://localhost:5000/User,如下圖所示。
本文是對《ASP.NET Core跨平臺開發從入門到實戰》 6.2 Code First 的更新,亦是對之前的博文ASP.NET Core 開發 - Entity Framework (EF) Core的更新。
如果你覺得本文對你有幫助,請點擊“推薦”,謝謝。