Ứng dụng Entity Framework Core đầu tiên
Ở hướng dẫn này, bạn sẽ tìm hiểu từng bước cách sử dụng Entity Framework Core theo cách tiếp cận Code First. Để minh họa, chúng tôi sẽ tạo một ứng dụng .NET Core Console bằng Visual Studio 2017 (hoặc mới hơn).
Ứng dụng .NET Core Console có thể được tạo bằng Visual Studio 2017 hoặc Giao diện dòng lệnh (CLI) cho .NET Core. Ở đây chúng tôi sẽ sử dụng Visual Studio 2017.
Để tạo ứng dụng .NET Core Console, hãy mở Visual Studio 2017 và chọn trên menu: File -> New -> Project.. Điều này sẽ mở cửa sổ bật lên New Project như hình ảnh bên dưới.
Trong cửa sổ New Project, mở rộng Installed -> Visual C# ở khung bên trái và chọn mẫu Console App (.NET Core) trong ngăn giữa.
Nhập tên dự án, vị trí đặt dự án và nhấp vào nút OK để tạo ứng dụng bảng điều khiển, như hình ảnh bên dưới.
Bây giờ, chúng ta cần cài đặt EF Core trong ứng dụng của mình bằng Package Manager Console. Chọn trên menu: Tools -> NuGet Package Manager -> Package Manager Console và thực hiện lệnh sau để cài đặt gói nhà cung cấp SQL Server:
PM> Install-Package Microsoft.EntityFrameworkCore.SqlServer
Tìm hiểu thêm về cài đặt EF Core trong phần “Cài đặt Entity Framework Core” của bài viết Entity Framework Core toàn tập tại đây:
Tạo mô hình dữ liệu thực thể trong EF Core
Entity Framework cần có một mô hình dữ liệu thực thể để giao tiếp với cơ sở dữ liệu. Nó xây dựng một mô hình dựa trên các lớp thực thể của bạn bằng cách sử dụng cấu hình chú thích dữ liệu và Fluent API.
Mô hình EF bao gồm ba phần: mô hình khái niệm, mô hình lưu trữ và ánh xạ giữa mô hình khái niệm và mô hình lưu trữ.
Theo cách tiếp cận Code First, EF xây dựng mô hình khái niệm dựa trên các lớp thực thể của bạn, lớp Context và các cấu hình.
EF Core xây dựng mô hình lưu trữ và ánh xạ dựa trên trình cung cấp cơ sở dữ liệu bạn sử dụng. Ví dụ, mô hình lưu trữ của SQL Server sẽ khác với DB2.
EF sử dụng mô hình này cho các hoạt động CRUD (Create, Read, Update, Delete) cho cơ sở dữ liệu.
Vì vậy, chúng ta cần tạo các lớp thực thể và lớp Context trước. Dưới đây là các lớp thực thể đơn giản cho Student và Course:
public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
}
public class Course
{
public int CourseId { get; set; }
public string CourseName { get; set; }
}
Bây giờ, chúng ta cần tạo một lớp Context bằng cách kế thừa từ lớp DbContext
. Lớp SchoolContext
sau còn được gọi là lớp Context .
namespace EFCoreTutorials
{
public class SchoolContext : DbContext
{
public DbSet<Student> Students { get; set; }
public DbSet<Course> Courses { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Server=.SQLEXPRESS;Database=SchoolDB;Trusted_Connection=True;");
}
}
}
Lớp Context ở trên bao gồm hai thuộc tính DbSet<TEntity>
cho Student
và Course
sẽ được ánh xạ tới các bảng Students
và Courses
trong cơ sở dữ liệu.
Trong phương thức OnConfiguring()
, một thể hiện của DbContextOptionsBuilder
được sử dụng để chỉ định cơ sở dữ liệu nào sẽ sử dụng.
Chúng tôi sẽ sử dụng MS SQL Server, nó được thêm bằng cách sử dụng phương thức mở rộng UseSqlServer
trên DbContextOptionsBuilder
.
Chuỗi kết nối "Server=.SQLEXPRESS;Database=SchoolDB;Trusted_Connection=True;"
trong phương thức UseSqlServer
cung cấp thông tin cơ sở dữ liệu: Server=
chỉ định máy chủ DB sẽ sử dụng, Database=
chỉ định tên của cơ sở dữ liệu và Trusted_Connection=True
chỉ định chế độ xác thực Windows.
EF Core sẽ sử dụng chuỗi kết nối này để tạo cơ sở dữ liệu khi chúng ta chạy Migration.
Sau khi tạo lớp Context và các lớp thực thể, đã đến lúc thêm Migration để tạo cơ sở dữ liệu.
Tạo Migration trong EF Core
EF Core có các lệnh Migration khác nhau để tạo hoặc cập nhật cơ sở dữ liệu dựa trên mô hình.
Tại thời điểm này chưa có cơ sở dữ liệu SchoolDB
. Vì vậy, chúng ta cần tạo cơ sở dữ liệu từ mô hình (thực thể và Context) bằng cách thêm Migration.
Chúng ta có thể thực thi lệnh Migration bằng cách sử dụng Package Manger Console hoặc dotnet CLI (giao diện dòng lệnh).
Trong Visual Studio, mở NuGet Package Manager Console từ Tools -> NuGet Package Manager -> Package Manager Console và nhập lệnh sau:
PM> add-migration CreateSchoolDB
Nếu bạn sử dụng dotnet CLI, hãy nhập lệnh sau.
> dotnet ef migrations add CreateSchoolDB
Điều này sẽ tạo một thư mục mới có tên Migrations trong dự án và tạo các file ModelSnapshot, như hình ảnh bên dưới.
Sau khi tạo Migration, chúng ta vẫn cần tạo cơ sở dữ liệu bằng lệnh update-database
trong Package Manager Console, như bên dưới.
PM> update-database –verbose
Nếu bạn sử dụng dotnet CLI, hãy nhập lệnh sau.
> dotnet ef database update
Điều này sẽ tạo cơ sở dữ liệu với tên và máy chủ được chỉ định trong chuỗi kết nối trong phương thức UseSqlServer()
. Nó tạo một bảng cho mỗi thuộc tính DbSet
(bảng Students
và Courses
) như hình ảnh bên dưới.
Đây là lần Migration đầu tiên để tạo cơ sở dữ liệu. Bây giờ, bất cứ khi nào chúng ta thêm hoặc cập nhật các lớp thực thể hoặc cấu hình, chúng ta cần đồng bộ hóa cơ sở dữ liệu với mô hình bằng cách sử dụng các lệnh add-migration và update-database.
Đọc hoặc ghi dữ liệu
Bây giờ, chúng ta có thể sử dụng lớp Context để lưu và truy xuất dữ liệu, như ví dụ bên dưới.
namespace EFCoreTutorials
{
class Program
{
static void Main(string[] args)
{
using (var context = new SchoolContext())
{
var std = new Student()
{
Name = "Bill"
};
context.Students.Add(std);
context.SaveChanges();
}
}
}
}
Vì vậy, bạn cần thực hiện các bước này để sử dụng Entity Framework Core trong ứng dụng của mình. Để biết thêm về các truy vấn trong Entity Framework Core bạn có thể xem thêm bài viết sau.