目錄git
Entity Framework (EF) Core 是輕量化、可擴展、開源和跨平臺版的經常使用 Entity Framework 數據訪問技術。github
EF Core 可用做對象關係映射程序 (O/RM),以便於 .NET 開發人員可以使用 .NET 對象來處理數據庫,這樣就沒必要常常編寫大部分數據訪問代碼了。數據庫
EF Core 支持多個數據庫引擎,請參閱數據庫提供程序瞭解詳細信息。c#
在本教程中,將建立一個 .NET Core 控制檯應用,該應用使用 Entity Framework Core 對 Microsoft SQL Server 數據庫執行數據訪問。cookie
新建控制檯項目:app
執行 PowerShell 命令asp.net
dotnet new console -o ConsoleApp
以下圖ide
將當前目錄更改成應用程序的目錄,以下所示:函數
cd ConsoleApp
安裝 Microsoft.EntityFrameworkCore.SqlServer 和 Microsoft.EntityFrameworkCore.Tools工具
dotnet add package Microsoft.EntityFrameworkCore.SqlServer dotnet add package Microsoft.EntityFrameworkCore.Tools
運行 dotnet restore
來安裝新的程序包。
使用如下內容建立一個新的 Model.cs 文件。
using Microsoft.EntityFrameworkCore; using System.Collections.Generic; namespace ConsoleApp { public class BloggingContext : DbContext { public DbSet<Blog> Blogs { get; set; } public DbSet<Post> Posts { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("Server=你的數據庫地址;Database=ConsoleApp;User Id=你的數據庫帳號;Password=你的數據庫密碼;"); } } public class Blog { public int BlogId { get; set; } public string Url { get; set; } public ICollection<Post> Posts { get; set; } } public class Post { public int PostId { get; set; } public string Title { get; set; } public string Content { get; set; } public int BlogId { get; set; } public Blog Blog { get; set; } } }
在實際應用程序中,應將每一個類放在單獨的文件中,並將鏈接字符串放在配置文件或環境變量中。 爲簡化本教程,全部內容均放在一個文件中。
有了模型後,便可經過遷移建立數據庫。
dotnet ef migrations add InitialCreate
覺得遷移搭建基架,併爲模型建立一組初始表。dotnet ef database update
以將新遷移應用到數據庫。 在應用遷移以前,此命令可建立數據庫。打開 Program.cs 並將內容替換爲如下代碼:
using System; namespace ConsoleApp { class Program { static void Main(string[] args) { using (var db = new BloggingContext()) { db.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/adonet" }); var count = db.SaveChanges(); Console.WriteLine("{0} records saved to database", count); Console.WriteLine(); Console.WriteLine("All blogs in database:"); foreach (var blog in db.Blogs) { Console.WriteLine(" - {0}", blog.Url); } } } } }
運行 dotnet run
從控制檯測試應用。
在本教程中,將使用 Entity Framework Core 構建執行基本數據訪問的 ASP.NET Core MVC 應用程序。
單擊「肯定」
對於本教程,無需安裝提供程序包,由於本教程使用 SQL Server。 SQL Server 提供程序包包含在 Microsoft.AspnetCore.App 元包中。
將此文件的內容替換爲如下代碼:
using System.Collections.Generic; using Microsoft.EntityFrameworkCore; namespace WebApplication.Models { public class BloggingContext : DbContext { public BloggingContext(DbContextOptions<BloggingContext> options) : base(options) { } public DbSet<Blog> Blogs { get; set; } public DbSet<Post> Posts { get; set; } } public class Blog { public int BlogId { get; set; } public string Url { get; set; } public ICollection<Post> Posts { get; set; } } public class Post { public int PostId { get; set; } public string Title { get; set; } public string Content { get; set; } public int BlogId { get; set; } public Blog Blog { get; set; } } }
生產應用一般會將每一個類放在單獨的文件中。 爲簡單起見,本教程將這些類放在一個文件中。
若要使 BloggingContext
可用於 MVC 控制器,請在 Startup.cs
中將其註冊爲服務。
在應用程序啓動過程當中,經過依賴關係注入 註冊服務(如 BloggingContext),以便可以經過構造函數的參數和屬性向使用服務的組件(如 MVC 控制器)自動提供該服務。
在 Startup.cs 中,添加如下 using 語句:
using WebApplication.Models; using Microsoft.EntityFrameworkCore;
將如下 手動高亮
的代碼添加到 ConfigureServices
方法:
public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); var connection = @"Server=你的數據庫地址;Database=WebApplication;User Id=你的數據庫帳號;Password=你的數據庫密碼;"; // 手動高亮 services.AddDbContext<BloggingContext> // 手動高亮 (options => options.UseSqlServer(connection)); // 手動高亮 }
生產應用一般會將鏈接字符串放在配置文件或環境變量中。 爲簡單起見,本教程在代碼中定義它。
如下步驟使用遷移建立數據庫。
運行如下命令:
Add-Migration InitialCreate Update-Database
若是收到錯誤,指出 The term 'add-migration' is not recognized as the name of a cmdlet,請關閉並從新打開 Visual Studio。
Add-Migration 命令爲遷移搭建基架,以便爲模型建立一組初始表。 Update-Database 命令建立數據庫並向其應用新的遷移。
生成 Blog 實體控制器和視圖的基架。
單擊 添加。