Mã đầu tiên là gì?
Với cách tiếp cận Code First, bạn có thể tạo các thực thể hoặc mô hình trong mã của mình. Các thuộc tính và cấu hình khác nhau xác định các mối quan hệ và khóa trong cơ sở dữ liệu. Khi các mô hình được xác định và định cấu hình, chúng tôi có thể di chuyển chúng sang cơ sở dữ liệu bằng các công cụ cli của khung thực thể
Để hiểu rõ hơn về mã, cách tiếp cận đầu tiên luôn tốt hơn là có một ví dụ thực tế. Chúng tôi sẽ tạo hai thực thể Người dùng & Công việc. Người dùng sẽ có khóa chính Id và FirstName dưới dạng chuỗi. Thực thể công việc sẽ có Id khóa chính, Tên dưới dạng chuỗi và UserId làm khóa ngoại đối với thực thể Người dùng
điều kiện tiên quyết
Trước khi bắt đầu, chúng tôi sẽ cần một máy chủ MySQL chạy cục bộ trên cổng 3306. Cung cấp hướng dẫn về cách cài đặt MySQL sẽ nằm ngoài phạm vi, nhưng có rất nhiều hướng dẫn sẵn có để giúp bạn. Tại thời điểm này, không cần tạo cơ sở dữ liệu hoặc bảng mới. Chỉ cần có một máy chủ MySQL đang chạy là đủ. Chúng tôi cũng sẽ cần một ứng dụng khách MySQL để thêm một số dữ liệu sau này. Bạn có thể sử dụng DBeaver
Thiết lập dự án
Để bắt đầu cài đặt. MẠNG 6. 0 SDK nếu chưa được cài đặt. Bắn lệnh dưới đây để tạo một ứng dụng dotnet mới
dotnet new webapi --name dotnet
Nó sẽ tạo ra một cái mới. dự án mạng với bộ điều khiển và một vài tệp khác. Để hỗ trợ kết nối với MySQL, chúng ta cần thêm gói nuget. Chúng tôi cũng sẽ thêm Microsoft. EntityFrameworkCore về cơ bản là một ORM để kết nối với cơ sở dữ liệu. Để làm như vậy, hãy thực hiện các lệnh bên dưới trong dự án dotnet mới được tạo
dotnet add package Pomelo.EntityFrameworkCore.MySql --version 6.0.1
dotnet add package Microsoft.EntityFrameworkCore --version 6.0.4
dotnet add package Microsoft.EntityFrameworkCore.Design --version 6.0.4
Vì chúng tôi không còn yêu cầu Dự báo thời tiết. tập tin cs loại bỏ nó. Thay vào đó, hãy tạo hai thực thể khác trong Công việc. cs & Người dùng. cs như dưới đây
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace dotnet;
public class User
{
[Key]
[DatabaseGenerated[DatabaseGeneratedOption.Identity]]
public int Id { get; set; }
public string FirstName { get; set; }
}
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace dotnet;
public class Job
{
[Key]
[DatabaseGenerated[DatabaseGeneratedOption.Identity]]
public int Id { get; set; }
public string Name { get; set; }
public int UserId { get; set; }
[ForeignKey["UserId"]]
public virtual User User { get; set; }
}
Chúng tôi cũng sẽ cần một lớp con DbContext để truy cập các thực thể này. Tạo tên tệp MySQLDBContext. cs và thêm nội dung bên dưới
using Microsoft.EntityFrameworkCore;
namespace dotnet;
public class MySQLDBContext : DbContext
{
public DbSet User { get; set; }
public DbSet Job { get; set; }
public MySQLDBContext[DbContextOptions options] : base[options] { }
}
Chúng tôi muốn cấu hình. NET để sử dụng lớp DbContext này cho ánh xạ O/RM. Điều hướng đến Chương trình của bạn. cs và thay thế bằng nội dung bên dưới. Ghi chú. Từ. MẠNG 6. 0, khởi động. cs bị xóa và thay vào đó là Chương trình. cs được sử dụng cho tất cả các cấu hình
using dotnet;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Configuration;
var builder = WebApplication.CreateBuilder[args];
// Add services to the container.
builder.Services.AddDbContext[options =>
{
var connectionString = builder.Configuration.GetConnectionString["DefaultConnection"];
options.UseMySql[connectionString, ServerVersion.AutoDetect[connectionString]];
}];
builder.Services.AddControllers[];
// Learn more about configuring Swagger/OpenAPI at //aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer[];
builder.Services.AddSwaggerGen[];
var app = builder.Build[];
// Configure the HTTP request pipeline.
if [app.Environment.IsDevelopment[]]
{
app.UseSwagger[];
app.UseSwaggerUI[];
}
app.UseHttpsRedirection[];
app.UseAuthorization[];
app.MapControllers[];
app.Run[];
Vì chúng tôi đang sử dụng Cấu hình tìm nạp Kết nối mặc định từ Chuỗi kết nối, chúng tôi sẽ phải thêm nó vào tệp cài đặt ứng dụng của mình. Để đạt được điều đó, hãy đặt nội dung của cài đặt ứng dụng. phát triển. json và cài đặt ứng dụng. các tệp json như bên dưới
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"DefaultConnection": "server=localhost; port=3306; database=super-app; user=root; password=$SuperApp1; Persist Security Info=False; Connect Timeout=300"
}
}
Tiếp theo, chúng ta sẽ tạo api GET trả về danh sách các đối tượng Công việc trong cơ sở dữ liệu. Để làm như vậy, hãy xóa WeatherForecastController. cs và thêm một UserController. tệp cs có nội dung bên dưới
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
namespace dotnet.Controllers
{
[Route["api/[controller]"]]
[ApiController]
public class JobController : Controller
{
private MySQLDBContext _dbContext;
public JobController[MySQLDBContext context]
{
_dbContext = context;
}
[HttpGet]
public IList Get[]
{
return [this._dbContext.Job.Include[x => x.User].ToList[]];
}
}
}
Tất cả chúng ta đều thiết lập mã khôn ngoan. Nhưng chúng tôi vẫn cần thiết lập cơ sở dữ liệu của mình. Để làm như vậy, chúng tôi sẽ tạo bảng Người dùng và Công việc trong cơ sở dữ liệu siêu ứng dụng của chúng tôi
Công cụ NET EF
NET's Entity Framework Core cung cấp một cách rất thuận tiện để đạt được nó. Trước tiên hãy cài đặt công cụ dotnet-ef cli bằng cách thực hiện lệnh bên dưới
________số 8_______Sau khi cài đặt, chúng tôi sẽ viết mã cách tiếp cận đầu tiên và tạo quá trình di chuyển các thực thể, sau đó sẽ được đẩy vào cơ sở dữ liệu của chúng tôi
dotnet ef migrations add InitialCreate
dotnet ef database update
Hai câu lệnh trên sau khi được thực thi sẽ tạo cơ sở dữ liệu, các bảng bên trong và cũng thiết lập mối quan hệ giữa hai bảng
Thêm dữ liệu vào MySQL
Để lấy dữ liệu từ cơ sở dữ liệu, trước tiên chúng ta cần thêm dữ liệu vào các bảng. Cài đặt bất kỳ máy khách MySQL nào để kết nối với cơ sở dữ liệu. Yêu thích cá nhân của tôi là DBeaver. Bây giờ, bạn có thể thêm dữ liệu từ DBeaver bằng cách trước tiên thêm một kết nối với các chi tiết như Host=localhost, Port=3306, User=root & password=$SuperApp1
Sau khi kết nối, điều hướng đến bảng Người dùng và thêm một hàng và lưu dữ liệu. Tương tự, điều hướng đến bảng Công việc, thêm một hàng và lưu dữ liệu. Cơ sở dữ liệu của chúng tôi đã sẵn sàng. Hãy chạy dự án của chúng tôi và xem kết quả
Đặt mọi thứ lại với nhau
Quay trở lại dự án của bạn và chạy lệnh dưới đây để bắt đầu dự án của chúng tôi
dotnet add package Pomelo.EntityFrameworkCore.MySql --version 6.0.1
dotnet add package Microsoft.EntityFrameworkCore --version 6.0.4
dotnet add package Microsoft.EntityFrameworkCore.Design --version 6.0.4
0Lệnh trên sẽ bắt đầu dự án của bạn và mở một liên kết vênh trong trình duyệt. Chỉ cần mở Job api và nhấp vào Dùng thử, sau đó là Thực thi. Một phản hồi tốt đẹp với một danh sách các công việc sẽ được hiển thị. Vì chúng tôi vừa thêm một Công việc nên chỉ có một Công việc được trả về như bên dưới
dotnet add package Pomelo.EntityFrameworkCore.MySql --version 6.0.1
dotnet add package Microsoft.EntityFrameworkCore --version 6.0.4
dotnet add package Microsoft.EntityFrameworkCore.Design --version 6.0.4
1Phần kết luận
Để kết luận, lõi khung thực thể là một trong những O/RM tốt nhất tôi từng gặp và hoạt động rất tốt với nhiều cơ sở dữ liệu khác nhau. Thiết lập nó dễ dàng như thực hiện một vài lệnh. Quá trình di chuyển từ thực thể sang cơ sở dữ liệu siêu mượt mà
Tôi có thể sử dụng Entity Framework với MySQL không?
Làm cách nào để kết nối cơ sở dữ liệu MySQL với Entity Framework MVC?
MySQL có tương thích với Visual Studio 2022 không?
Làm cách nào để kết nối MySQL với Entity Framework?