09 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
bưởi. Thực thểKhungLõi. MySql hiện đang tìm kiếm những người đóng góp cốt lõi
khả năng tương thích
Lõi EF và. NET lõi
Các phiên bản sau của EF Core và. NET Core tương thích với
09bưởi. Thực thểKhungLõi. Lõi MySqlEF. NET Core3. 0. 0-rc1. cuối cùng [phát hành trước]3. 0. 03. 02. 2. 62. 2. 62. 2/3. 0
Phiên bản và DBMS được hỗ trợ
09 được thử nghiệm với 2 phiên bản phụ mới nhất của
12 và
13. Các phiên bản cũ hơn có thể tương thích nhưng không được hỗ trợ hoặc thử nghiệm chính thức. Các phiên bản được hỗ trợ hiện tại là
- mysql 8. 0
- mysql 5. 7
- MariaDB 10. 4
- MariaDB 10. 3
Lịch trình và Lộ trình
Trạng thái quan trọng Ngày phát hành3. 0. 0Tính năng khóaSoon3. 0. 0-rc2Đã công bố2019-11-043. 0. 0-rc1Đã phát hành2019-10-062. 2. 6Đã phát hành2019-10-152. 2. 0Đã phát hành2019-02-072. 1. 4Đã phát hành2018-11-29Bản dựng hàng đêm
Để sử dụng các bản dựng hàng đêm từ nguồn cấp dữ liệu MyGet của chúng tôi, hãy thêm tệp
show variables like 'character_set_database';0 vào thư mục gốc giải pháp của bạn với các nội dung sau
Bắt đầu
1. Bộ ký tự máy chủ được đề xuất
Chúng tôi khuyên bạn nên đặt
show variables like 'character_set_database';1 làm bộ ký tự mặc định cho cơ sở dữ liệu MySQL của mình. Câu lệnh sau sẽ kiểm tra bộ ký tự DB của bạn
show variables like 'character_set_database';
2. Cấu hình CSPROJ
Đảm bảo rằng tệp
show variables like 'character_set_database';2 của bạn có các tham chiếu sau
Exe netcoreapp2.2
3. Cấu hình dịch vụ
Thêm
09 vào cấu hình dịch vụ trong tệp
show variables like 'character_set_database';4 của bạn
using System; using Microsoft.EntityFrameworkCore; using Pomelo.EntityFrameworkCore.MySql.Infrastructure; namespace YourNamespace // replace "YourNamespace" with the namespace of your application { public class Startup { public void ConfigureServices[IServiceCollection services] { // other service configurations go here services.AddDbContextPool[ // replace "YourDbContext" with the class name of your DbContext options => options.UseMySql["Server=localhost;Database=ef;User=root;Password=123456;", // replace with your Connection String mySqlOptions => { mySqlOptions.ServerVersion[new Version[5, 7, 17], ServerType.MySql]; // replace with your Server Version and Type } ]]; } } }
Xem Trang Wiki Tùy chọn Cấu hình của chúng tôi để biết danh sách đầy đủ các tùy chọn được hỗ trợ
4. Ứng dụng mẫu
Kiểm tra Kiểm tra tích hợp của chúng tôi để biết kho lưu trữ ví dụ bao gồm Ứng dụng MVC
5. Đọc Tài liệu cốt lõi của EF
Tham khảo Tài liệu EF Core của Microsoft để biết hướng dẫn chi tiết và các ví dụ về cách sử dụng EF Core
Giàn giáo / Kỹ thuật đảo ngược
Sử dụng công cụ EF Core để thực thi các lệnh giàn giáo
________số 8
Đóng góp
Một trong những cách dễ dàng nhất để đóng góp là báo cáo các vấn đề và tham gia thảo luận về các vấn đề đó. Bạn cũng có thể đóng góp bằng cách gửi yêu cầu kéo với các thay đổi mã và hỗ trợ kiểm tra
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
15 để 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
15 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 sau0
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êmHãy cũng loại bỏ gói
15 mà chúng tôi đã 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 loại bỏ 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 trong $ 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, 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 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
show variables like 'character_set_database';3
Hướng dẫn thiết lập trong
show variables like 'character_set_database';
33 của dự án giải thích cách tạo lại
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
show variables like 'character_set_database';
35 với các nội dung sau, thay thế các giá trị sau bằng giá trị của riêng bạnshow variables like 'character_set_database';
36 với tên người dùng của bạnshow variables like 'character_set_database';
37 với mật khẩu của bạnshow variables like 'character_set_database';
38 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
show variables like 'character_set_database';0
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
show variables like 'character_set_database';
39 trong chuỗi kết nối cơ sở dữ liệu trong
4 thành$ dotnet remove package MySqlConnector
show variables like 'character_set_database';
01 - Sao chép cơ sở dữ liệu
show variables like 'character_set_database';
02 bằng cách xuất nó, sau đó nhập nó với tên mới làshow variables like 'character_set_database';
01. Để 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 show variables like 'character_set_database';
04
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 show variables like 'character_set_database';07 có chứa lớp
show variables like 'character_set_database';08 nữa. 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
show variables like 'character_set_database';1
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
show variables like 'character_set_database';
09 vàshow variables like 'character_set_database';
10 - 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 luôn được gọi là
show variables like 'character_set_database';
11 và nó mở rộng chức năng của lớpshow variables like 'character_set_database';
12 của EF Core. Lớpshow variables like 'character_set_database';
12 đạ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 [show variables like 'character_set_database';
14s vàshow variables like 'character_set_database';
15s]. 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ớpshow variables like 'character_set_database';
12
Chúng tôi không phải thay đổi bất cứ điều gì với
show variables like 'character_set_database';09 hoặc
show variables like 'character_set_database';10 để 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
show variables like 'character_set_database';19, tạo một tệp mới có tên là
Exe netcoreapp2.230 và thêm đoạn mã sau vào đó
ToDoList/Mô hình/ToDoList bối cảnh. cs
Exe netcoreapp2.23
Hãy xem qua những gì đang xảy ra ở đây
Lớp
Exe netcoreapp2.2
31 của chúng tôi kế thừa [hoặc "mở rộng"] từ lớpshow variables like 'character_set_database';
12 của EF Core. Điều này đảm bảo nó bao gồm tất cả chức năngshow variables like 'character_set_database';
12 tích hợp sẵn mặc địnhLớp
Exe netcoreapp2.2
31 chứa một thuộc tính kiểuExe netcoreapp2.2
35 có tên làExe netcoreapp2.2
36 đại diện cho bảngExe netcoreapp2.2
37 trong cơ sở dữ liệu của chúng ta. Với thuộc tínhExe netcoreapp2.2
36 này, chúng ta đã khai báo một thực thể có tên làExe netcoreapp2.2
36 trong ngữ cảnh cơ sở dữ liệu To Do List của chúng ta- Lưu ý rằng để
Exe netcoreapp2.2
35 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 [show variables like 'character_set_database';
14] trong dấu ngoặc nhọn [show variables like 'character_set_database';
62] sauExe netcoreapp2.2
35
- 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ì
Exe netcoreapp2.2
31 là một phần mở rộng của lớpshow variables like 'character_set_database';
12, chúng tôi đang gọi hành vi của hàm tạo từ lớp đó;Trong hàm tạo
Exe netcoreapp2.2
31, chúng tôi liệt kê một tham số thuộc loạishow variables like 'character_set_database';
69 được gọi làusing System; using Microsoft.EntityFrameworkCore; using Pomelo.EntityFrameworkCore.MySql.Infrastructure; namespace YourNamespace // replace "YourNamespace" with the namespace of your application { public class Startup { public void ConfigureServices[IServiceCollection services] { // other service configurations go here services.AddDbContextPool[ // replace "YourDbContext" with the class name of your DbContext options => options.UseMySql["Server=localhost;Database=ef;User=root;Password=123456;", // replace with your Connection String mySqlOptions => { mySqlOptions.ServerVersion[new Version[5, 7, 17], ServerType.MySql]; // replace with your Server Version and Type } ]]; } } }
40. Đối số cho tham số này sẽ được chuyển qua nội xạ phụ thuộc từ
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 — cả cơ sở dữ liệu của chúng tôi dưới dạng dịch vụ hoặc cá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
using System; using Microsoft.EntityFrameworkCore; using Pomelo.EntityFrameworkCore.MySql.Infrastructure; namespace YourNamespace // replace "YourNamespace" with the namespace of your application { public class Startup { public void ConfigureServices[IServiceCollection services] { // other service configurations go here services.AddDbContextPool[ // replace "YourDbContext" with the class name of your DbContext options => options.UseMySql["Server=localhost;Database=ef;User=root;Password=123456;", // replace with your Connection String mySqlOptions => { mySqlOptions.ServerVersion[new Version[5, 7, 17], ServerType.MySql]; // replace with your Server Version and Type } ]]; } } }
45 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 - Đị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 tinshow variables like 'character_set_database';6
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ị
using System; using Microsoft.EntityFrameworkCore; using Pomelo.EntityFrameworkCore.MySql.Infrastructure; namespace YourNamespace // replace "YourNamespace" with the namespace of your application { public class Startup { public void ConfigureServices[IServiceCollection services] { // other service configurations go here services.AddDbContextPool[ // replace "YourDbContext" with the class name of your DbContext options => options.UseMySql["Server=localhost;Database=ef;User=root;Password=123456;", // replace with your Connection String mySqlOptions => { mySqlOptions.ServerVersion[new Version[5, 7, 17], ServerType.MySql]; // replace with your Server Version and Type } ]]; } } }
48 mới.using System; using Microsoft.EntityFrameworkCore; using Pomelo.EntityFrameworkCore.MySql.Infrastructure; namespace YourNamespace // replace "YourNamespace" with the namespace of your application { public class Startup { public void ConfigureServices[IServiceCollection services] { // other service configurations go here services.AddDbContextPool[ // replace "YourDbContext" with the class name of your DbContext options => options.UseMySql["Server=localhost;Database=ef;User=root;Password=123456;", // replace with your Connection String mySqlOptions => { mySqlOptions.ServerVersion[new Version[5, 7, 17], ServerType.MySql]; // replace with your Server Version and Type } ]]; } } }
49 Chỉ thịusing System; using Microsoft.EntityFrameworkCore; using Pomelo.EntityFrameworkCore.MySql.Infrastructure; namespace YourNamespace // replace "YourNamespace" with the namespace of your application { public class Startup { public void ConfigureServices[IServiceCollection services] { // other service configurations go here services.AddDbContextPool[ // replace "YourDbContext" with the class name of your DbContext options => options.UseMySql["Server=localhost;Database=ef;User=root;Password=123456;", // replace with your Connection String mySqlOptions => { mySqlOptions.ServerVersion[new Version[5, 7, 17], ServerType.MySql]; // replace with your Server Version and Type } ]]; } } }
48 này nhập phương thứcExe netcoreapp2.2
31 trong
5$ dotnet remove package MySqlConnector
Với
Exe netcoreapp2.2
31 là loại bối cảnh cơ sở dữ liệu EF Core mà chúng tôi muốn thiết lập. Hãy nhớ rằngExe netcoreapp2.2
31 là đại diện cho cơ sở dữ liệu MySQL của chúng tôiLà đối số cho phương thức
- 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 pháp
- Chúng tôi chuyển hai đối số cho phương thức
- 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
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
- 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
- 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 pháp
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à
158, 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 Cấu hình DbContext với Dependency Injection và cuộn xuống phần "Sử dụng DbContext với Dependency injection"
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
show variables like 'character_set_database';01 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
Exe netcoreapp2.2
37 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
05 thành$ dotnet remove package MySqlConnector
06$ dotnet remove package MySqlConnector
- Đổi tên của 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ở
show variables like 'character_set_database';09 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 show variables like 'character_set_database';14 của bạn thành
$ dotnet remove package MySqlConnector
06. Mô hình show variables like 'character_set_database';14 bây giờ trông như thế này
using System; using Microsoft.EntityFrameworkCore; using Pomelo.EntityFrameworkCore.MySql.Infrastructure; namespace YourNamespace // replace "YourNamespace" with the namespace of your application { public class Startup { public void ConfigureServices[IServiceCollection services] { // other service configurations go here services.AddDbContextPool[ // replace "YourDbContext" with the class name of your DbContext options => options.UseMySql["Server=localhost;Database=ef;User=root;Password=123456;", // replace with your Connection String mySqlOptions => { mySqlOptions.ServerVersion[new Version[5, 7, 17], ServerType.MySql]; // replace with your Server Version and Type } ]]; } } }4
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ữ