Entity Framework Core(EF Core) 最簡單的入門示例

概述

Entity Framework (EF) Core 是輕量化、可擴展、開源和跨平臺版的經常使用 Entity Framework 數據訪問技術。github

EF Core 可用做對象關係映射程序 (O/RM),以便於 .NET 開發人員可以使用 .NET 對象來處理數據庫,這樣就沒必要常常編寫大部分數據訪問代碼了。數據庫

EF Core 支持多個數據庫引擎,請參閱數據庫提供程序瞭解詳細信息。c#

基於 .NET Core 的 EF Core 入門

在本教程中,將建立一個 .NET Core 控制檯應用,該應用使用 Entity Framework Core 對 Microsoft SQL Server 數據庫執行數據訪問。cookie

建立新項目

  • 新建控制檯項目:app

    執行 PowerShell 命令asp.net

    dotnet new console -o ConsoleApp

    以下圖ide

更改當前目錄

  • 將當前目錄更改成應用程序的目錄,以下所示:函數

    cd ConsoleApp

安裝 Entity Framework Core

  • 安裝 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 從控制檯測試應用。

基於 ASP.NET Core 的 EF Core 入門

在本教程中,將使用 Entity Framework Core 構建執行基本數據訪問的 ASP.NET Core MVC 應用程序。

建立新項目

  • 打開 Visual Studio 2017
  • 「文件」>「新建」>「項目」
  • 從左菜單中選擇「已安裝」>「Visual C#」>「.NET Core」。
  • 選擇「ASP.NET Core Web 應用程序」。
  • 輸入「WebApplication」做爲名稱,而後單擊「肯定」。
  • 在「新建 ASP.NET Core Web 應用程序」對話框中:
  • 確保在下拉列表中選擇「.NET Core」和「ASP.NET Core 2.1」
  • 選擇「Web 應用程序(模型視圖控制器)」項目模板
  • 確保將「身份驗證」設置爲「無身份驗證」
  • 單擊「肯定」

安裝 Entity Framework Core

對於本教程,無需安裝提供程序包,由於本教程使用 SQL Server。 SQL Server 提供程序包包含在 Microsoft.AspnetCore.App 元包中。

建立模型

  • 右鍵單擊「Models」文件夾,而後選擇「添加」>「類」。
  • 輸入「Model.cs」做爲名稱,而後單擊「肯定」。
  • 將此文件的內容替換爲如下代碼:

    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)); // 手動高亮
        }

    生產應用一般會將鏈接字符串放在配置文件或環境變量中。 爲簡單起見,本教程在代碼中定義它。

建立數據庫

如下步驟使用遷移建立數據庫。

  • 「工具」>「NuGet 包管理器」>「包管理器控制檯」
  • 運行如下命令:

    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 實體控制器和視圖的基架。

  • 在「解決方案資源管理器」中,右鍵單擊「Controllers」文件夾,而後選擇「添加」>「控制器」。
  • 選擇「視圖使用 Entity Framework 的 MVC 控制器」,而後單擊「添加」。
  • 將「模型類」設置爲「Blog」,將「數據上下文類」設置爲「BloggingContext」。
  • 單擊 添加。

運行此應用程序

  • 調試 > 開始執行(不調試)
  • 導航到 /Blogs
相關文章
相關標籤/搜索