ASP.NET Core 開發-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作數據庫。
Entity Framework Core 1.0 也已經發布了,可以適用於 .NET Core 1.0 及ASP.NET Core 1.0 。
EF Core RC2 時,使用的Code First: http://www.cnblogs.com/linezero/p/EntityFrameworkCore.html
EntityFrameworkCore SQLite 本篇文章同樣以SQLite 數據庫作為介紹Database First 開發。
目前 EF Core 1.0支持的數據庫:
- Microsoft SQL Server
- SQLite
- Postgres (Npgsql)
- SQL Server Compact Edition
- InMemory (for testing purposes)
- DevArt has paid providers for MySQL, Oracle, and many other databases(第三方開發收費)
對於MySQL、Oracle 這些應該還要等待官方出驅動。
如果大家想ASP.NET Core 操作MySQL 可以參考我的這篇文章:http://www.cnblogs.com/linezero/p/NETCoreMySQL.html
現在正式開始Database First 開發。
新建項目
這里我們選擇 ASP.NET Core Web Application (.NET Core)
這里選擇Web 應用程序,然后更改身份驗證 改為 不進行身份驗證
引用Entity Framework (EF) Core 1.0
引用 EF Core Sqlite
Install-Package Microsoft.EntityFrameworkCore.Sqlite
引用 EF Core Tool
Install-Package Microsoft.EntityFrameworkCore.Tools –Pre
引用 EF Core Sqlite Design
Install-Package Microsoft.EntityFrameworkCore.Sqlite.Design
引用好以后我們在project.json -> tools 節點加上 "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
"tools": { "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final", "BundlerMinifier.Core": "2.0.238", "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final", "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final" },
生成實體
這里我就不新建數據庫了,直接使用上次文章的數據庫,來反向生成實體類。
將 efcoredemo.db 拷貝到 bin\Debug\netcoreapp1.0 文件夾下。
首先我們在 src\EFCoreDBFirst 文件夾 執行命令 dotnet ef 確保命令可以執行。
下面我們來生成實體:
dotnet ef dbcontext scaffold "FileName=efcoredemo.db" Microsoft.EntityFrameworkCore.Sqlite
執行完成后,在項目目錄也就生成了對應的實體類及對應context。
項目使用
首先我們要在 Startup.cs 的 ConfigureServices 方法添加以下代碼:
public void ConfigureServices(IServiceCollection services) { services.AddDbContext<efcoredemoContext>(); // Add framework services. services.AddMvc(); }
新建一個 UserController
然后 在Views 添加一個 User 文件,然后添加對應的視圖。
添加一個Register Action,再添加一個 Register 視圖
@model EFCoreDBFirst.Users @{ 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

public class UserController : Controller { private efcoredemoContext _context; public UserController(efcoredemoContext context) { _context = context; } // GET: /<controller>/ public IActionResult Index() { return View(_context.Users.ToList()); } public IActionResult Register() { return View(); } [HttpPost] [ValidateAntiForgeryToken] public IActionResult Register(Users registeruser) { if (ModelState.IsValid) { _context.Users.Add(registeruser); _context.SaveChanges(); return RedirectToAction("Index"); } return View(registeruser); } }
程序運行起來:
http://localhost:5000/User/Register
列表展示: Index.cshtml

@model IEnumerable<EFCoreDBFirst.Users> @{ ViewBag.Title = "用戶"; } <table class="table"> <tr> <th>Id</th> <th>用戶名</th> <th>密碼</th> </tr> @foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.Id) </td> <td> @Html.DisplayFor(modelItem => item.UserName) </td> <td> @Html.DisplayFor(modelItem => item.Password) </td> </tr> } </table>
http://localhost:5000/User
參考文檔:https://docs.efproject.net/en/latest/platforms/aspnetcore/existing-db.html
如果你覺得本文對你有幫助,請點擊“推薦”,謝謝。