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
//licenses.nuget.org/MIT
icon.png
//github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql
//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êmChú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ôiChà, 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
4Tất cả các dự án khác mà bạn tạo sẽ cần những thứ sau
4 được liệt kê trong$ dotnet remove package MySqlConnector
7 và cam kết với lịch sử Git$ dotnet remove package MySqlConnector
obj
bin
appsettings.json
Hướng dẫn thiết lập trong
3 của dự án giải thích cách tạo lạiobj bin appsettings.json
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$ dotnet remove package MySqlConnector
Và một
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ạnobj bin appsettings.json
6 với tên người dùng của bạnobj bin appsettings.json
7 với mật khẩu của bạnobj bin appsettings.json
8 với tên cơ sở dữ liệu của bạnobj bin appsettings.json
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
- Cập nhật khóa
9 trong chuỗi kết nối cơ sở dữ liệu trongobj bin appsettings.json
4 thành$ dotnet remove package MySqlConnector
1{ "ConnectionStrings": { "DefaultConnection": "Server=localhost;Port=3306;database=[YOUR-DB-NAME];uid=[YOUR-USER-HERE];pwd=[YOUR-PASSWORD-HERE];" } }
- Sao chép cơ sở dữ liệu
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{ "ConnectionStrings": { "DefaultConnection": "Server=localhost;Port=3306;database=[YOUR-DB-NAME];uid=[YOUR-USER-HERE];pwd=[YOUR-PASSWORD-HERE];" } }
Xóa {
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Port=3306;database=[YOUR-DB-NAME];uid=[YOUR-USER-HERE];pwd=[YOUR-PASSWORD-HERE];"
}
}
4
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Port=3306;database=[YOUR-DB-NAME];uid=[YOUR-USER-HERE];pwd=[YOUR-PASSWORD-HERE];"
}
}
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ạnLoạ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
9 và{ "ConnectionStrings": { "DefaultConnection": "Server=localhost;Port=3306;database=[YOUR-DB-NAME];uid=[YOUR-USER-HERE];pwd=[YOUR-PASSWORD-HERE];" } }
0namespace ToDoList.Models { public static class DBConfiguration { public static string ConnectionString { get; set; } } }
- 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à
1 và nó mở rộng chức năng của lớpnamespace ToDoList.Models { public static class DBConfiguration { public static string ConnectionString { get; set; } } }
2 của EF Core. Lớpnamespace 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ớpnamespace ToDoList.Models { public static class DBConfiguration { public static string ConnectionString { get; set; } } }
2namespace ToDoList.Models { public static class DBConfiguration { public static string ConnectionString { get; set; } } }
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 theoTrong 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
1 của chúng tôi kế thừa [hoặc "mở rộng"] từ lớpusing Microsoft.EntityFrameworkCore; namespace ToDoList.Models { public class ToDoListContext : DbContext { public DbSet Items { get; set; } public ToDoListContext[DbContextOptions options] : base[options] { } } }
2 của EF Core. Điều này đảm bảo nó bao gồm tất cả chức năngnamespace ToDoList.Models { public static class DBConfiguration { public static string ConnectionString { get; set; } } }
2 tích hợp sẵn mặc địnhnamespace ToDoList.Models { public static class DBConfiguration { public static string ConnectionString { get; set; } } }
Lớp
1 chứa một thuộc tính kiểuusing 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ảngusing 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ínhusing 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 tausing Microsoft.EntityFrameworkCore; namespace ToDoList.Models { public class ToDoListContext : DbContext { public DbSet Items { get; set; } public ToDoListContext[DbContextOptions options] : base[options] { } } }
- Lưu ý rằng để
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 [using Microsoft.EntityFrameworkCore; namespace ToDoList.Models { public class ToDoListContext : DbContext { public DbSet Items { get; set; } public ToDoListContext[DbContextOptions options] : base[options] { } } }
4] trong dấu ngoặc nhọn [namespace ToDoList.Models { public static class DBConfiguration { public static string ConnectionString { get; set; } } }
2] sauusing 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[]; } } }
5using Microsoft.EntityFrameworkCore; namespace ToDoList.Models { public class ToDoListContext : DbContext { public DbSet Items { get; set; } public ToDoListContext[DbContextOptions options] : base[options] { } } }
- Lưu ý rằng để
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ì
1 là một phần mở rộng của lớpusing Microsoft.EntityFrameworkCore; namespace ToDoList.Models { public class ToDoListContext : DbContext { public DbSet Items { get; set; } public ToDoListContext[DbContextOptions options] : base[options] { } } }
2, chúng tôi đang gọi hành vi của hàm tạo từ lớp đó;namespace ToDoList.Models { public static class DBConfiguration { public static string ConnectionString { get; set; } } }
Trong hàm tạo
1, chúng tôi liệt kê một tham số thuộc loạiusing Microsoft.EntityFrameworkCore; namespace ToDoList.Models { public class ToDoListContext : DbContext { public DbSet Items { get; set; } public ToDoListContext[DbContextOptions options] : base[options] { } } }
9 được gọi là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[]; } } }
0. Đối số cho tham số này sẽ được chuyển qua phép nội xạ phụ thuộc từnamespace ToDoList.Models { public class Item { public int ItemId { get; set; } public string Description { get; set; } .. // Item constructor and methods omitted } }
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$ dotnet remove package MySqlConnector
Đị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ụ
$ dotnet remove package MySqlConnector
Tiếp theo, chúng tôi sẽ cập nhật
$ dotnet remove package MySqlConnector
5 để thực hiện hai việc- Định cấu hình
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ôinamespace ToDoList.Models { public class Item { public int ItemId { get; set; } public string Description { get; set; } .. // Item constructor and methods omitted } }
- Đị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
4$ dotnet remove package MySqlConnector
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 tinusing 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ị
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ứcnamespace ToDoList.Models { public class Item { public int ItemId { get; set; } public string Description { get; set; } .. // Item constructor and methods omitted } }
MySqlConnector
1 từ không gian tênMySqlConnector
2. Chúng tôi cũng duy trìMySqlConnector
3, bởi vì chúng tôi sử dụng mô hình
1 trong vòngusing Microsoft.EntityFrameworkCore; namespace ToDoList.Models { public class ToDoListContext : DbContext { public DbSet Items { get; set; } public ToDoListContext[DbContextOptions options] : base[options] { } } }
5$ dotnet remove package MySqlConnector
Với
MySqlConnector
6, 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
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ằngusing 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ôiusing Microsoft.EntityFrameworkCore; namespace ToDoList.Models { public class ToDoListContext : DbContext { public DbSet Items { get; set; } public ToDoListContext[DbContextOptions options] : base[options] { } } }
Là đối số cho phương thức
MySqlConnector
9, 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
MySqlConnector
1 - Chúng tôi chuyển hai đối số cho phương thức
MySqlConnector
1 - Chuỗi kết nối cơ sở dữ liệu trong
4, mà chúng tôi nhận được khi truy cập vào$ dotnet remove package MySqlConnector
MySqlConnector
3. Hãy nhớ rằng
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$ dotnet remove package MySqlConnector
MySqlConnector
5 - 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
MySqlConnector
6 trongMySqlConnector
7 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
- 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
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à MySqlConnector
8, nhưng tên của cơ sở dữ liệu thực tế vẫn được đặt trong
$ dotnet remove package MySqlConnector
4Và 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
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
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à
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$ dotnet remove package MySqlConnector
Để đá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
7 trong Bộ điều hướng, nhấp chuột phải và chọn Bảng thay đổiusing Microsoft.EntityFrameworkCore; namespace ToDoList.Models { public class ToDoListContext : DbContext { public DbSet Items { get; set; } public ToDoListContext[DbContextOptions options] : base[options] { } } }
- Đổi tên của cột
05 thành$ dotnet remove package MySqlConnector
06$ dotnet remove package MySqlConnector
- Đổi tên cột
07 thành$ dotnet remove package MySqlConnector
08$ dotnet remove package MySqlConnector
- Nhấp vào Áp dụng
- Đổi tên của cột
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àynamespace 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ữ