ASP.NET Core 開發 – Entity Framework (EF) Core,ASP.NET Core 運算元據庫。
Entity Framework (EF) Core RC2 也釋出了,可以適用於 .NET Core 及ASP.NET Core 。
EntityFrameworkCore SQLite 本篇文章以SQLite 資料庫作為介紹。
目前 EF Core 支援的資料庫:
Microsoft SQL Server
SQLite
Postgres (Npgsql)
SQL Server Compact Edition
InMemory (for testing purposes)
後面將會增加:
MySQL
IBM DB2
介紹完了,現在正式開始。
新建專案
這裡我們選擇 ASP.NET Core Web Application (.NET Core)
這裡選擇web 應用程式,然後更改身份驗證 改為 不進行身份驗證
引用Entity Framework (EF) Core
NuGet官方源已經支援 .NET Core RC2 的相關引用。
然後在 NuGet命令列下安裝 ,我們也可以使用NuGet包管理器安裝。
1 |
Install-Package Microsoft.EntityFrameworkCore.Sqlite –Pre |
建立實體
我們在專案新增一個 Models 資料夾。
新建一個User.cs
1 2 3 4 5 6 |
public class User { public int Id { get; set; } public string UserName { get; set; } public string Password { get; set; } } |
這裡我為了方便,繼續新建 DataContext.cs
1 2 3 4 5 6 7 8 |
public class DataContext : DbContext { public DataContext(DbContextOptions<DataContext> options) : base(options) { } public DbSet<User> Users { get; set; } } |
建立資料庫
開啟 Startup.cs 在 ConfigureServices 下新增如下程式碼:
1 2 3 4 5 6 7 |
public void ConfigureServices(IServiceCollection services) { var connection = "Filename=./efcoredemo.db"; services.AddDbContext<DataContext>(options => options.UseSqlite(connection)); // Add framework services. services.AddMvc(); } |
新增好以後,我們來安裝 Microsoft.EntityFrameworkCore.Tools
1 |
Install-Package Microsoft.EntityFrameworkCore.Tools –Pre |
安裝好以後,我們在 project.json tools 節點下
1 2 3 4 5 6 7 8 |
"tools": { "Microsoft.EntityFrameworkCore.Tools": { "version": "1.0.0-preview1-final", "imports": [ "portable-net45+win8+dnxcore50", "portable-net45+win8" ] }, |
開始建立資料庫 使用 dotnet ef
開啟資料夾的命令列,
輸入
1 2 3 |
dotnet ef migrations add MyFirstMigration dotnet ef database update |
這樣我們就建立好了資料庫。更多命令請 dotnet ef -h
專案使用
新建一個 UserController
然後 在Views 新增一個 User 檔案,然後新增對應的檢視。
新增一個Register Action,再新增一個 Register 檢視
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
@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> |
UserController.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
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); } } |
程式執行起來:
http://localhost:5000/User/Register
列表展示
Index.cshtml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
@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> |