Bưởi thực thểframeworkcore mysql 6.0 1

Nhà cung cấp cơ sở dữ liệu MySQL của Pomelo cho Entity Framework Core


  
    Pomelo.EntityFrameworkCore.MySql
    5.0.1
    Laurents Meyer, Caleb Lloyd, Yuko Zheng
    false
    MIT
    https://licenses.nuget.org/MIT
    icon.png
    https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql
    https://avatars3.githubusercontent.com/u/19828814
    Pomelo's MySQL database provider for Entity Framework Core.
    Copyright 2020 © Pomelo Foundation
    pomelo mysql mariadb Entity Framework Core entity-framework-core ef efcore ef core orm sql
    
    
      
        
        
        
      
    
  

Trong bài học này, chúng tôi sẽ giải thích cách định cấu hình một dự án để sử dụng Entity Framework Core với cơ sở dữ liệu MySQL. Các hướng dẫn trong bài học này có thể được sử dụng cho bất kỳ ứng dụng nào bạn xây dựng để sử dụng EF Core với cơ sở dữ liệu MySQL

Đối với hướng dẫn này, chúng ta sẽ sử dụng ứng dụng Danh sách việc cần làm làm ví dụ và chúng ta sẽ bắt đầu từ nơi chúng ta đã dừng lại với ứng dụng Danh sách việc cần làm. sử dụng MySqlConnector để giao tiếp với cơ sở dữ liệu MySQL. Điều đó có nghĩa là hướng dẫn này sẽ bao gồm các hướng dẫn về cách xóa MySqlConnector và cách cập nhật các phương thức tùy chỉnh mà chúng tôi đã tạo trong bài tập về nhà cuối tuần để giao tiếp với cơ sở dữ liệu MySQL của chúng tôi. Như mọi khi, bạn có thể viết mã lâu với những bài học này hoặc chỉ cần đọc qua chúng. Chúng tôi sẽ cung cấp các liên kết đến một repo ví dụ khi cần và ở phần cuối của hướng dẫn

Thiết lập dự án


Thêm và loại bỏ các phụ thuộc

Bỏ cái cũ và với cái mới. Chúng tôi sẽ bắt đầu bằng cách thêm các phụ thuộc bổ sung mà chúng tôi sẽ cần cho dự án EF Core này. Chuyển đến thư mục gốc của dự án sản xuất (

$ dotnet remove package MySqlConnector
0) qua thiết bị đầu cuối và thêm các phụ thuộc sau

$ dotnet add package Microsoft.EntityFrameworkCore -v 6.0.0
$ dotnet add package Pomelo.EntityFrameworkCore.MySql -v 6.0.0

Lưu ý một trong số này không bắt đầu với Microsoft. Đó là bởi vì

$ dotnet remove package MySqlConnector
1 thực sự là một gói của bên thứ ba có thể được tải xuống từ cùng một nguồn với các gói chính thức của Microsoft. Xem Repo GitHub chính thức của Entity Framework Core để tìm hiểu thêm

Chúng ta cũng hãy xóa gói MySqlConnector mà chúng ta đã thêm vào cuối tuần

$ dotnet remove package MySqlConnector

Lưu ý cách MySqlConnector hiện đã biến mất khỏi. tập tin csproj. Lệnh

$ dotnet remove package MySqlConnector
3 cho phép chúng tôi xóa các gói mà chúng tôi không cần khỏi dự án của mình một cách thuận tiện và sạch sẽ

Chuỗi kết nối cơ sở dữ liệu

Tiếp theo, chúng ta cần thêm chuỗi kết nối cơ sở dữ liệu vào ứng dụng của mình

Khi chúng tôi sử dụng gói MySqlConnector để giao tiếp với cơ sở dữ liệu, chúng tôi đã đặt chuỗi kết nối cơ sở dữ liệu của mình vào

$ dotnet remove package MySqlConnector
4 và tải nó trong quá trình tạo máy chủ ứng dụng web của chúng tôi vào
$ dotnet remove package MySqlConnector
5. Chúng tôi đã sử dụng
$ dotnet remove package MySqlConnector
4 để bảo vệ dữ liệu nhạy cảm trong chuỗi kết nối cơ sở dữ liệu của mình bằng cách thêm nó vào
$ dotnet remove package MySqlConnector
7 để nó không bao giờ bị theo dõi trong lịch sử Git của chúng tôi. Chúng tôi cũng bao gồm các hướng dẫn về cách tạo lại một
$ dotnet remove package MySqlConnector
4 trong READMEs dự án của chúng tôi

Chà, chúng tôi sẽ sử dụng

$ dotnet remove package MySqlConnector
4 theo cách tương tự để tải và bảo vệ chuỗi kết nối cơ sở dữ liệu của chúng tôi với EF Core. Vì vậy, nếu bạn đang theo dõi và cập nhật ứng dụng Danh sách việc cần làm của mình, thì chúng tôi không cần thực hiện thay đổi lớn nào với các quy trình của mình xung quanh việc sử dụng
$ dotnet remove package MySqlConnector
4

Tất cả các dự án khác mà bạn tạo sẽ cần những thứ sau

  • $ dotnet remove package MySqlConnector
    
    4 được liệt kê trong
    $ dotnet remove package MySqlConnector
    
    7 và cam kết với lịch sử Git
obj
bin
appsettings.json
  • Hướng dẫn thiết lập trong

    obj
    bin
    appsettings.json
    
    3 của dự án giải thích cách tạo lại
    $ dotnet remove package MySqlConnector
    
    4, bao gồm vị trí của tệp (trong thư mục sản xuất của dự án) và nội dung của tệp

  • Và một

    obj
    bin
    appsettings.json
    
    5 với các nội dung sau, thay thế các giá trị sau bằng giá trị của riêng bạn

    • obj
      bin
      appsettings.json
      
      6 với tên người dùng của bạn
    • obj
      bin
      appsettings.json
      
      7 với mật khẩu của bạn
    • obj
      bin
      appsettings.json
      
      8 với tên cơ sở dữ liệu của bạn

Tên dự án. Giải pháp/Tên dự án/cài đặt ứng dụng. json

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Port=3306;database=[YOUR-DB-NAME];uid=[YOUR-USER-HERE];pwd=[YOUR-PASSWORD-HERE];"
  }
}

Cập nhật tên cơ sở dữ liệu và tạo cơ sở dữ liệu mới

Chúng tôi khuyên bạn nên tạo cơ sở dữ liệu mới cho hướng dẫn sử dụng EF Core này để giao tiếp với cơ sở dữ liệu MySQL. Làm như vậy sẽ bảo vệ cơ sở dữ liệu mà chúng tôi đã thiết lập với phiên bản Danh sách việc cần làm sử dụng MySqlConnector. Để làm điều này, hãy làm theo các bước sau

  1. Cập nhật khóa
    obj
    bin
    appsettings.json
    
    9 trong chuỗi kết nối cơ sở dữ liệu trong
    $ dotnet remove package MySqlConnector
    
    4 thành
    {
      "ConnectionStrings": {
        "DefaultConnection": "Server=localhost;Port=3306;database=[YOUR-DB-NAME];uid=[YOUR-USER-HERE];pwd=[YOUR-PASSWORD-HERE];"
      }
    }
    
    1
  2. Sao chép cơ sở dữ liệu
    {
      "ConnectionStrings": {
        "DefaultConnection": "Server=localhost;Port=3306;database=[YOUR-DB-NAME];uid=[YOUR-USER-HERE];pwd=[YOUR-PASSWORD-HERE];"
      }
    }
    
    2 bằng cách xuất nó rồi nhập nó với tên mới là
    {
      "ConnectionStrings": {
        "DefaultConnection": "Server=localhost;Port=3306;database=[YOUR-DB-NAME];uid=[YOUR-USER-HERE];pwd=[YOUR-PASSWORD-HERE];"
      }
    }
    
    1. Để biết hướng dẫn chính xác về nhập và xuất cơ sở dữ liệu, hãy truy cập bài học này từ bài tập về nhà cuối tuần

Xóa { "ConnectionStrings": { "DefaultConnection": "Server=localhost;Port=3306;database=[YOUR-DB-NAME];uid=[YOUR-USER-HERE];pwd=[YOUR-PASSWORD-HERE];" } } 4

Chúng tôi sẽ định cấu hình dự án của mình để sử dụng EF Core trong

$ dotnet remove package MySqlConnector
5. Trong quá trình này, chúng tôi sẽ thiết lập cơ sở dữ liệu MySQL của mình để chạy như một dịch vụ trong
$ dotnet remove package MySqlConnector
5. Do đó, chúng tôi không còn cần tệp
{
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Port=3306;database=[YOUR-DB-NAME];uid=[YOUR-USER-HERE];pwd=[YOUR-PASSWORD-HERE];"
  }
}
7 có chứa lớp
{
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Port=3306;database=[YOUR-DB-NAME];uid=[YOUR-USER-HERE];pwd=[YOUR-PASSWORD-HERE];"
  }
}
8. Bắt đầu bằng cách xóa tệp này khỏi dự án Danh sách việc cần làm của bạn

Loại bỏ những điều sau đây

ToDoList/Mô hình/DatabaseConfig. cs

namespace ToDoList.Models
{
  public static class DBConfiguration
  {
    public static string ConnectionString { get; set; }
  }
}

Tạo bối cảnh và thực thể cơ sở dữ liệu

Tiếp theo, chúng ta cần tạo một mô hình cơ sở dữ liệu và các bảng trong dự án của mình để Entity Framework Core sử dụng để ánh xạ các lớp và đối tượng C# của chúng ta tới các mục và bảng cơ sở dữ liệu MySQL và ngược lại. EF Core sử dụng thuật ngữ cụ thể cho các mô hình này

  • Một thực thể đại diện cho một bảng cơ sở dữ liệu (với các cột và loại) dưới dạng mô hình C# trong ứng dụng của chúng tôi. Các thực thể trong ứng dụng To Do List của chúng tôi được mô tả trong
    {
      "ConnectionStrings": {
        "DefaultConnection": "Server=localhost;Port=3306;database=[YOUR-DB-NAME];uid=[YOUR-USER-HERE];pwd=[YOUR-PASSWORD-HERE];"
      }
    }
    
    9 và
    namespace ToDoList.Models
    {
      public static class DBConfiguration
      {
        public static string ConnectionString { get; set; }
      }
    }
    
    0
  • Bối cảnh cơ sở dữ liệu đại diện cho toàn bộ cơ sở dữ liệu (với tất cả các bảng) dưới dạng mô hình trong ứng dụng của chúng tôi. Mô hình này luôn được gọi là
    namespace ToDoList.Models
    {
      public static class DBConfiguration
      {
        public static string ConnectionString { get; set; }
      }
    }
    
    1 và nó mở rộng chức năng của lớp
    namespace ToDoList.Models
    {
      public static class DBConfiguration
      {
        public static string ConnectionString { get; set; }
      }
    }
    
    2 của EF Core. Lớp
    namespace ToDoList.Models
    {
      public static class DBConfiguration
      {
        public static string ConnectionString { get; set; }
      }
    }
    
    2 đại diện cho một phiên với cơ sở dữ liệu MySQL của chúng tôi có thể được sử dụng để truy vấn và lưu các phiên bản của các thực thể của chúng tôi (
    namespace ToDoList.Models
    {
      public static class DBConfiguration
      {
        public static string ConnectionString { get; set; }
      }
    }
    
    4s và
    namespace ToDoList.Models
    {
      public static class DBConfiguration
      {
        public static string ConnectionString { get; set; }
      }
    }
    
    5s). Mỗi khi chúng tôi muốn tham chiếu cơ sở dữ liệu trong một ứng dụng, chúng tôi sẽ làm như vậy bằng cách sử dụng một thể hiện của lớp
    namespace ToDoList.Models
    {
      public static class DBConfiguration
      {
        public static string ConnectionString { get; set; }
      }
    }
    
    2

Chúng tôi không phải thay đổi bất cứ điều gì với

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Port=3306;database=[YOUR-DB-NAME];uid=[YOUR-USER-HERE];pwd=[YOUR-PASSWORD-HERE];"
  }
}
9 hoặc
namespace ToDoList.Models
{
  public static class DBConfiguration
  {
    public static string ConnectionString { get; set; }
  }
}
0 để biến những mô hình đó thành các thực thể EF Core. Chúng tôi liệt kê các thực thể trong ứng dụng của mình bằng cách xác định chúng trong ngữ cảnh cơ sở dữ liệu. Vì vậy, hãy tạo điều đó tiếp theo

Trong vòng

namespace ToDoList.Models
{
  public static class DBConfiguration
  {
    public static string ConnectionString { get; set; }
  }
}
9, hãy tạo một tệp mới có tên là
using Microsoft.EntityFrameworkCore;

namespace ToDoList.Models
{
  public class ToDoListContext : DbContext
  {
    public DbSet Items { get; set; }

    public ToDoListContext(DbContextOptions options) : base(options) { }
  }
}
0 và thêm đoạn mã sau vào đó

ToDoList/Mô hình/ToDoList bối cảnh. cs

using Microsoft.EntityFrameworkCore;

namespace ToDoList.Models
{
  public class ToDoListContext : DbContext
  {
    public DbSet Items { get; set; }

    public ToDoListContext(DbContextOptions options) : base(options) { }
  }
}

Hãy xem qua những gì đang xảy ra ở đây

  • Lớp

    using Microsoft.EntityFrameworkCore;
    
    namespace ToDoList.Models
    {
      public class ToDoListContext : DbContext
      {
        public DbSet Items { get; set; }
    
        public ToDoListContext(DbContextOptions options) : base(options) { }
      }
    }
    
    1 của chúng tôi kế thừa (hoặc "mở rộng") từ lớp
    namespace ToDoList.Models
    {
      public static class DBConfiguration
      {
        public static string ConnectionString { get; set; }
      }
    }
    
    2 của EF Core. Điều này đảm bảo nó bao gồm tất cả chức năng
    namespace ToDoList.Models
    {
      public static class DBConfiguration
      {
        public static string ConnectionString { get; set; }
      }
    }
    
    2 tích hợp sẵn mặc định

  • Lớp

    using Microsoft.EntityFrameworkCore;
    
    namespace ToDoList.Models
    {
      public class ToDoListContext : DbContext
      {
        public DbSet Items { get; set; }
    
        public ToDoListContext(DbContextOptions options) : base(options) { }
      }
    }
    
    1 chứa một thuộc tính kiểu
    using Microsoft.EntityFrameworkCore;
    
    namespace ToDoList.Models
    {
      public class ToDoListContext : DbContext
      {
        public DbSet Items { get; set; }
    
        public ToDoListContext(DbContextOptions options) : base(options) { }
      }
    }
    
    5 có tên là
    using Microsoft.EntityFrameworkCore;
    
    namespace ToDoList.Models
    {
      public class ToDoListContext : DbContext
      {
        public DbSet Items { get; set; }
    
        public ToDoListContext(DbContextOptions options) : base(options) { }
      }
    }
    
    6 đại diện cho bảng
    using Microsoft.EntityFrameworkCore;
    
    namespace ToDoList.Models
    {
      public class ToDoListContext : DbContext
      {
        public DbSet Items { get; set; }
    
        public ToDoListContext(DbContextOptions options) : base(options) { }
      }
    }
    
    7 trong cơ sở dữ liệu của chúng tôi. Với thuộc tính
    using Microsoft.EntityFrameworkCore;
    
    namespace ToDoList.Models
    {
      public class ToDoListContext : DbContext
      {
        public DbSet Items { get; set; }
    
        public ToDoListContext(DbContextOptions options) : base(options) { }
      }
    }
    
    6 này, chúng ta đã khai báo một thực thể có tên là
    using Microsoft.EntityFrameworkCore;
    
    namespace ToDoList.Models
    {
      public class ToDoListContext : DbContext
      {
        public DbSet Items { get; set; }
    
        public ToDoListContext(DbContextOptions options) : base(options) { }
      }
    }
    
    6 trong ngữ cảnh cơ sở dữ liệu To Do List của chúng ta

    • Lưu ý rằng để
      using Microsoft.EntityFrameworkCore;
      
      namespace ToDoList.Models
      {
        public class ToDoListContext : DbContext
        {
          public DbSet Items { get; set; }
      
          public ToDoListContext(DbContextOptions options) : base(options) { }
        }
      }
      
      5 tạo một thực thể cho một đối tượng C# cụ thể trong ứng dụng của chúng ta, chúng ta luôn cần đảm bảo bao gồm tên lớp (
      namespace ToDoList.Models
      {
        public static class DBConfiguration
        {
          public static string ConnectionString { get; set; }
        }
      }
      
      4) trong dấu ngoặc nhọn (
      using Microsoft.AspNetCore.Builder;
      using Microsoft.EntityFrameworkCore;
      using Microsoft.Extensions.DependencyInjection;
      using ToDoList.Models;
      
      namespace ToDoList
      {
        class Program
        {
          static void Main(string[] args)
          {
            WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
      
            builder.Services.AddControllersWithViews();
      
            builder.Services.AddDbContext(
                              dbContextOptions => dbContextOptions
                                .UseMySql(
                                  builder.Configuration["ConnectionStrings:DefaultConnection"], ServerVersion.AutoDetect(builder.Configuration["ConnectionStrings:DefaultConnection"]
                                )
                              )
                            );
      
            WebApplication app = builder.Build();
      
            // app.UseDeveloperExceptionPage();
            app.UseHttpsRedirection();
            app.UseStaticFiles();
      
            app.UseRouting();
      
            app.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
      
            app.Run();
          }
        }
      }
      
      2) sau
      using Microsoft.EntityFrameworkCore;
      
      namespace ToDoList.Models
      {
        public class ToDoListContext : DbContext
        {
          public DbSet Items { get; set; }
      
          public ToDoListContext(DbContextOptions options) : base(options) { }
        }
      }
      
      5
  • Chúng tôi cũng bao gồm một hàm tạo kế thừa hành vi của hàm tạo lớp cha của nó. Vì

    using Microsoft.EntityFrameworkCore;
    
    namespace ToDoList.Models
    {
      public class ToDoListContext : DbContext
      {
        public DbSet Items { get; set; }
    
        public ToDoListContext(DbContextOptions options) : base(options) { }
      }
    }
    
    1 là một phần mở rộng của lớp
    namespace ToDoList.Models
    {
      public static class DBConfiguration
      {
        public static string ConnectionString { get; set; }
      }
    }
    
    2, chúng tôi đang gọi hành vi của hàm tạo từ lớp đó;

  • Trong hàm tạo

    using Microsoft.EntityFrameworkCore;
    
    namespace ToDoList.Models
    {
      public class ToDoListContext : DbContext
      {
        public DbSet Items { get; set; }
    
        public ToDoListContext(DbContextOptions options) : base(options) { }
      }
    }
    
    1, chúng tôi liệt kê một tham số thuộc loại
    using Microsoft.AspNetCore.Builder;
    using Microsoft.EntityFrameworkCore;
    using Microsoft.Extensions.DependencyInjection;
    using ToDoList.Models;
    
    namespace ToDoList
    {
      class Program
      {
        static void Main(string[] args)
        {
          WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
    
          builder.Services.AddControllersWithViews();
    
          builder.Services.AddDbContext(
                            dbContextOptions => dbContextOptions
                              .UseMySql(
                                builder.Configuration["ConnectionStrings:DefaultConnection"], ServerVersion.AutoDetect(builder.Configuration["ConnectionStrings:DefaultConnection"]
                              )
                            )
                          );
    
          WebApplication app = builder.Build();
    
          // app.UseDeveloperExceptionPage();
          app.UseHttpsRedirection();
          app.UseStaticFiles();
    
          app.UseRouting();
    
          app.MapControllerRoute(
              name: "default",
              pattern: "{controller=Home}/{action=Index}/{id?}");
    
          app.Run();
        }
      }
    }
    
    9 được gọi là
    namespace ToDoList.Models
    {
      public class Item
      {
        public int ItemId { get; set; }
        public string Description { get; set; }
    
        .. // Item constructor and methods omitted
      }
    }
    
    0. Đối số cho tham số này sẽ được chuyển qua phép nội xạ phụ thuộc từ
    $ dotnet remove package MySqlConnector
    
    5 khi ứng dụng của chúng tôi được xây dựng và chạy. Lưu ý rằng chúng tôi chưa thiết lập bất kỳ thứ gì trong
    $ dotnet remove package MySqlConnector
    
    5 — không phải cơ sở dữ liệu dưới dạng dịch vụ hoặc tùy chọn ngữ cảnh cơ sở dữ liệu của chúng tôi. Chúng tôi sẽ làm điều đó tiếp theo

Định cấu hình $ dotnet remove package MySqlConnector 5 để chạy Cơ sở dữ liệu của chúng tôi dưới dạng Dịch vụ

Tiếp theo, chúng tôi sẽ cập nhật

$ dotnet remove package MySqlConnector
5 để thực hiện hai việc

  1. Định cấu hình
    namespace ToDoList.Models
    {
      public class Item
      {
        public int ItemId { get; set; }
        public string Description { get; set; }
    
        .. // Item constructor and methods omitted
      }
    }
    
    5 của chúng tôi để thiết lập dịch vụ cho cơ sở dữ liệu của chúng tôi
  2. Định cấu hình cơ sở dữ liệu MySQL của chúng tôi để sử dụng chuỗi kết nối cơ sở dữ liệu trong
    $ dotnet remove package MySqlConnector
    
    4

Hãy xem mã mới trong

$ dotnet remove package MySqlConnector
5. Chúng tôi sẽ hiển thị toàn bộ tập tin

using Microsoft.AspNetCore.Builder;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using ToDoList.Models;

namespace ToDoList
{
  class Program
  {
    static void Main(string[] args)
    {
      WebApplicationBuilder builder = WebApplication.CreateBuilder(args);

      builder.Services.AddControllersWithViews();

      builder.Services.AddDbContext(
                        dbContextOptions => dbContextOptions
                          .UseMySql(
                            builder.Configuration["ConnectionStrings:DefaultConnection"], ServerVersion.AutoDetect(builder.Configuration["ConnectionStrings:DefaultConnection"]
                          )
                        )
                      );

      WebApplication app = builder.Build();

      // app.UseDeveloperExceptionPage();
      app.UseHttpsRedirection();
      app.UseStaticFiles();

      app.UseRouting();

      app.MapControllerRoute(
          name: "default",
          pattern: "{controller=Home}/{action=Index}/{id?}");

      app.Run();
    }
  }
}

Hãy giải thích các bản cập nhật

  • Đầu tiên lưu ý rằng chúng tôi có một chỉ thị

    namespace ToDoList.Models
    {
      public class Item
      {
        public int ItemId { get; set; }
        public string Description { get; set; }
    
        .. // Item constructor and methods omitted
      }
    }
    
    8 mới.
    namespace ToDoList.Models
    {
      public class Item
      {
        public int ItemId { get; set; }
        public string Description { get; set; }
    
        .. // Item constructor and methods omitted
      }
    }
    
    9 Chỉ thị
    namespace ToDoList.Models
    {
      public class Item
      {
        public int ItemId { get; set; }
        public string Description { get; set; }
    
        .. // Item constructor and methods omitted
      }
    }
    
    8 này nhập phương thức MySqlConnector1 từ không gian tên MySqlConnector2. Chúng tôi cũng duy trì MySqlConnector3, bởi vì chúng tôi sử dụng mô hình
    using Microsoft.EntityFrameworkCore;
    
    namespace ToDoList.Models
    {
      public class ToDoListContext : DbContext
      {
        public DbSet Items { get; set; }
    
        public ToDoListContext(DbContextOptions options) : base(options) { }
      }
    }
    
    1 trong vòng
    $ dotnet remove package MySqlConnector
    
    5

  • Với MySqlConnector6, chúng tôi thêm EF Core làm dịch vụ cho ứng dụng Danh sách việc cần làm của chúng tôi. Chúng tôi chỉ định

    using Microsoft.EntityFrameworkCore;
    
    namespace ToDoList.Models
    {
      public class ToDoListContext : DbContext
      {
        public DbSet Items { get; set; }
    
        public ToDoListContext(DbContextOptions options) : base(options) { }
      }
    }
    
    1 là loại ngữ cảnh cơ sở dữ liệu EF Core mà chúng tôi muốn thiết lập. Hãy nhớ rằng
    using Microsoft.EntityFrameworkCore;
    
    namespace ToDoList.Models
    {
      public class ToDoListContext : DbContext
      {
        public DbSet Items { get; set; }
    
        public ToDoListContext(DbContextOptions options) : base(options) { }
      }
    }
    
    1 là đại diện cho cơ sở dữ liệu MySQL của chúng tôi

  • Là đối số cho phương thức MySqlConnector9, chúng tôi định cấu hình các tùy chọn ngữ cảnh cơ sở dữ liệu Danh sách công việc của chúng tôi

    • Chúng tôi tuyên bố rằng chúng tôi muốn sử dụng cơ sở dữ liệu MySQL với phương thức MySqlConnector1
    • Chúng tôi chuyển hai đối số cho phương thức MySqlConnector1
    • Chuỗi kết nối cơ sở dữ liệu trong
      $ dotnet remove package MySqlConnector
      
      4, mà chúng tôi nhận được khi truy cập vào MySqlConnector3. Hãy nhớ rằng
      $ dotnet remove package MySqlConnector
      
      4 được tải ngầm khi chúng tôi bắt đầu quá trình xây dựng máy chủ ứng dụng web của mình bằng cách chạy MySqlConnector5
    • Phiên bản của máy chủ MySQL mà chúng tôi đặt thành tự động phát hiện
    • Lưu ý rằng cú pháp MySqlConnector6 trong MySqlConnector7 tạo biểu thức lambda. Nói tóm lại, biểu thức lambda chỉ là một cách để viết một hàm ẩn danh theo cách cô đọng. Biểu thức lambda được sử dụng trong nhiều ngôn ngữ và tương tự như các hàm mũi tên trong JavaScript. Để biết thêm thông tin về lambdas, hãy xem tài liệu của Microsoft

Với việc EF Core hiện được định cấu hình để chạy dưới dạng dịch vụ, EF Core sẽ tự động xử lý việc mở và đóng kết nối cơ sở dữ liệu mỗi khi chúng tôi truy vấn cơ sở dữ liệu của mình. khá gọn gàng

Lưu ý rằng mặc dù chúng tôi đặt tên ngữ cảnh cơ sở dữ liệu EF Core của mình là MySqlConnector8, nhưng tên của cơ sở dữ liệu thực tế vẫn được đặt trong

$ dotnet remove package MySqlConnector
4

Và cuối cùng, nếu bạn muốn đọc thêm về cách định cấu hình EF Core như một dịch vụ, hãy truy cập tài liệu và cuộn xuống phần "Sử dụng DbContext với nội xạ phụ thuộc"

Cập nhật lên Quy ước đặt tên cốt lõi của EF


Để EF Core ánh xạ các mô hình C# của chúng tôi tới cơ sở dữ liệu MySQL, chúng tôi cần tuân theo các quy ước đặt tên cụ thể, chính xác là hai quy ước

  1. Theo mặc định, EF Core ánh xạ các thuộc tính thực thể (thuộc tính của các mô hình C# của chúng tôi) tới các cột cơ sở dữ liệu có cùng tên. Ánh xạ này phân biệt chữ hoa chữ thường. Do đó, tên cột trong bảng cơ sở dữ liệu của chúng tôi phải khớp với tên thuộc tính và trường hợp thuộc tính của mô hình của chúng tôi

  2. Cũng cần lưu ý rằng Entity Framework Core cũng nhận ra khóa chính của thực thể thông qua quy ước đặt tên. để một thuộc tính được công nhận là khóa chính, chúng ta cần đặt tên cho thuộc tính đó là

    $ dotnet remove package MySqlConnector
    
    00 hoặc
    $ dotnet remove package MySqlConnector
    
    01. Chúng tôi sẽ thực hiện theo cách thứ hai, đặt tên cho các khóa chính của chúng tôi là
    $ dotnet remove package MySqlConnector
    
    01

Để đáp ứng các quy ước đặt tên này, chúng tôi cần truy cập cơ sở dữ liệu

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Port=3306;database=[YOUR-DB-NAME];uid=[YOUR-USER-HERE];pwd=[YOUR-PASSWORD-HERE];"
  }
}
1 của mình và cập nhật tên cột theo cách sau

  • Sử dụng MySQL Workbench, tìm bảng
    using Microsoft.EntityFrameworkCore;
    
    namespace ToDoList.Models
    {
      public class ToDoListContext : DbContext
      {
        public DbSet Items { get; set; }
    
        public ToDoListContext(DbContextOptions options) : base(options) { }
      }
    }
    
    7 trong Bộ điều hướng, nhấp chuột phải và chọn Bảng thay đổi
    • Đổi tên của cột
      $ dotnet remove package MySqlConnector
      
      05 thành
      $ dotnet remove package MySqlConnector
      
      06
    • Đổi tên cột
      $ dotnet remove package MySqlConnector
      
      07 thành
      $ dotnet remove package MySqlConnector
      
      08
    • Nhấp vào Áp dụng

Tiếp theo, hãy mở

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Port=3306;database=[YOUR-DB-NAME];uid=[YOUR-USER-HERE];pwd=[YOUR-PASSWORD-HERE];"
  }
}
9 trong dự án
$ dotnet remove package MySqlConnector
0 và cập nhật thuộc tính
$ dotnet remove package MySqlConnector
00 của mô hình
namespace ToDoList.Models
{
  public static class DBConfiguration
  {
    public static string ConnectionString { get; set; }
  }
}
4 của bạn thành
$ dotnet remove package MySqlConnector
06. Mô hình
namespace ToDoList.Models
{
  public static class DBConfiguration
  {
    public static string ConnectionString { get; set; }
  }
}
4 bây giờ trông như thế này

namespace ToDoList.Models
{
  public class Item
  {
    public int ItemId { get; set; }
    public string Description { get; set; }

    .. // Item constructor and methods omitted
  }
}

Lưu ý rằng chúng ta sẽ tuân theo các quy ước đặt tên này khi thiết lập cơ sở dữ liệu và thực thể kể từ bây giờ

Tài liệu tham khảo kho lưu trữ

Theo liên kết bên dưới để xem phiên bản mẫu của ứng dụng To Do List sẽ trông như thế nào vào thời điểm này. Lưu ý rằng đây là một liên kết đến một nhánh cụ thể trong kho lưu trữ

Làm cách nào để sử dụng Entity Framework Core với MySQL?

Bạn có thể kiểm tra API trực tiếp bằng một công cụ như Postman hoặc kết nối nó với ví dụ về ứng dụng Angular hoặc React có sẵn. .
Bắt đầu ở chế độ gỡ lỗi. .
Thêm nhà cung cấp cơ sở dữ liệu MySQL từ NuGet. .
Thêm chuỗi kết nối vào cài đặt ứng dụng. .
Cập nhật bối cảnh dữ liệu để sử dụng MySQL. .
Cài đặt công cụ dotnet ef. .
Thêm gói EF Core Design từ NuGet

Bưởi MySQL là gì?

Bưởi. Thực thểKhungLõi. MySql là nhà cung cấp Lõi khung thực thể được xây dựng dựa trên MySqlConnector cho phép sử dụng ORM Lõi khung thực thể với MySQL .

EF có hoạt động với MySQL không?

Entity Framework là tên được đặt cho một tập hợp các công nghệ hỗ trợ phát triển các ứng dụng phần mềm hướng dữ liệu. MySQL Connector/NET hỗ trợ Entity Framework 6. 0 (EF6 hoặc EF 6. 4) và Lõi khung thực thể (Lõi EF) , đây là khung mới nhất hiện có cho.

Gói nào sẽ khiến gói quan hệ Microsoft EntityFrameworkCore được thêm vào thông qua phần phụ thuộc NuGet?

Yêu cầu NuGet 3. 6 hoặc cao hơn. Lệnh này dự định sẽ được sử dụng trong Bảng điều khiển quản lý gói trong Visual Studio, vì nó sử dụng phiên bản Gói cài đặt của mô-đun NuGet. . Gói NuGet (2. 4K)