Entity Framework Core của Microsoft là một phiên bản đa nền tảng, nhẹ và linh hoạt của phiên bản tiền nhiệm Entity Framework. EF Core là một công cụ lập bản đồ quan hệ đối tượng (ORM) cung cấp một cách thức chuẩn hóa để lưu trữ và truy xuất dữ liệu đến và từ các nguồn dữ liệu đa dạng.
Bằng cách lập trình dựa trên một khái niệm thay vì một mô hình quan hệ. Do đó, không có sự sai lệch trở kháng giữa cách dữ liệu được biểu diễn trong ứng dụng và cách nó được lưu trữ trong cơ sở dữ liệu.
Kế thừa là một tính năng của Lập trình hướng đối tượng cho phép bạn tạo các lớp con từ một lớp cơ sở do đó mở rộng các tính năng của lớp cơ sở. Entity Framework Core cung cấp hỗ trợ tuyệt vời cho việc kế thừa. Bài viết này nói về cách chúng tôi thực hiện kế thừa trong Entity Framework Core. Chúng tôi sẽ tận dụng EntityDeveloper để trao đổi với cơ sở dữ liệu.
Điều kiện tiên quyết
Để có thể làm việc với các ví dụ mã được trình bày trong bài viết này, bạn phải cài đặt phần sau trong hệ thống của mình:
- Visual Studio 2019 Community Edition (tải xuống)
- dotConnect cho PostgreSQL (tải xuống)
- Nhà phát triển thực thể
Bạn có thể tải xuống bản sao của Entity Developer (phiên bản dùng thử) từ đây:https://www.devart.com/entitydeveloper/download.html.
Tạo cơ sở dữ liệu
Bây giờ dự án ASP.NET Core Web API đã được tạo trong Visual Studio 2019; bước tiếp theo là tạo cơ sở dữ liệu. Lưu ý rằng vì mục đích đơn giản, chúng tôi sẽ sử dụng cơ sở dữ liệu với một vài bảng có thiết kế đơn giản trong ví dụ này. Tạo cơ sở dữ liệu có tên Demo và tạo ba bảng (Người, Người dùng và Người quản lý) trong đó. Các trường trong các bảng này nên ánh xạ với các thuộc tính của các lớp mô hình được hiển thị ở phần sau của bài viết này.
Tạo Dự án API Web lõi ASP.NET mới
Giả sử rằng phần mềm cần thiết đã được cài đặt trên máy tính của bạn để có thể làm việc với Nhà phát triển thực thể, hãy làm theo các bước được nêu bên dưới để tạo dự án ASP.NET Core Web API mới.
1. Trước hết, hãy mở Visual Studio 2019 IDE.
2. Tiếp theo, nhấp vào Tạo dự án mới khi IDE đã được tải.
3. Nhấp vào Tạo dự án mới .
4. Tiếp theo, chọn ASP.NET Core Web Application .
5. Nhấp vào Tiếp theo .
6. Chỉ định tên và vị trí dự án - nơi nó sẽ được lưu trữ trong hệ thống của bạn.
7. Theo tùy chọn, nhấp vào Đặt giải pháp và dự án trong cùng một thư mục hộp kiểm.
8. Tiếp theo, nhấp vào Tạo .
9. Trong phần Tạo ứng dụng web ASP.NET Core mới cửa sổ hộp thoại được hiển thị tiếp theo, chọn API như mẫu dự án.
10. Chọn ASP.NET Core 3.1 trở lên làm phiên bản.
11. Bạn nên tắt Định cấu hình cho HTTPS và Bật hỗ trợ Docker tùy chọn bằng cách tắt các hộp kiểm tương ứng.
12. Vì chúng tôi sẽ không sử dụng xác thực trong ví dụ này, hãy chỉ định xác thực là Không xác thực .
13. Cuối cùng, nhấp vào nút Tạo để kết thúc quá trình.
Tạo mô hình dữ liệu thực thể
Điều tiếp theo bạn nên làm là tạo một mô hình dữ liệu thực thể. Khi bạn tạo một mô hình trong Entity Developer, có hai tùy chọn để bạn lựa chọn:Database First (tùy chọn này được chọn theo mặc định) và Model First. Trong ví dụ này, chúng tôi sẽ tận dụng cách tiếp cận Cơ sở dữ liệu đầu tiên. Hãy nhớ chọn tùy chọn Tạo từ cơ sở dữ liệu để tạo mô hình của bạn từ cơ sở dữ liệu và chọn các đối tượng cơ sở dữ liệu mà bạn muốn trở thành một phần của mô hình dữ liệu thực thể của mình.
Thực hiện theo các bước được nêu bên dưới để tạo mô hình dữ liệu thực thể trong Nhà phát triển thực thể bằng cách sử dụng phương pháp tiếp cận cơ sở dữ liệu đầu tiên.
1. Chọn dự án của bạn trong Trình khám phá giải pháp Cửa sổ.
2. Nhấp chuột phải và chọn Thêm > Mặt hàng mới .
3. Chọn Mô hình cốt lõi Devart EF như mẫu như hình dưới đây.
4. Chỉ định tên cho mô hình dữ liệu thực thể của bạn và nhấp vào Thêm .
5. Chỉ định các thuộc tính kết nối và kiểm tra kết nối.
6. Nhấp vào Tiếp theo để tiếp tục.
7. Theo mặc định, tùy chọn “Tạo từ Cơ sở dữ liệu” sẽ được chọn. Vì chúng tôi muốn mô hình được tạo từ cơ sở dữ liệu, hãy nhấp vào Tiếp theo để tiếp tục.
8. Bỏ chọn tất cả các tùy chọn và sau đó chỉ xác định các đối tượng cơ sở dữ liệu mà bạn muốn trở thành một phần của mô hình. Đây là nơi bạn nên chọn bảng Sản phẩm và Danh mục.
9. Trong Thiết lập quy tắc đặt tên màn hình, bạn có thể tùy chọn chỉ định quy tắc đặt tên cho các thực thể của mình.
10. Trong màn hình tiếp theo, bạn có thể tùy chọn chỉ định các thuộc tính của mô hình.
11. Trong màn hình tiếp theo, bạn có thể tùy ý chọn nội dung sơ đồ mô hình.
12. Trong màn hình tiếp theo, bạn có thể tùy chọn chỉ định các mẫu tạo mã.
13. Chỉ định mẫu tạo mã mà bạn chọn.
14. Cuối cùng, nhấp vào Hoàn tất để hoàn tất quá trình.
Mô hình dữ liệu thực thể ADO.NET của bạn bằng cách sử dụng Nhà phát triển thực thể sẽ được tạo cùng với ngữ cảnh dữ liệu và các lớp mô hình.
Kế thừa trong Core Framework thực thể
Entity Framework Core (EF Core) cho phép bạn ánh xạ phân cấp lớp .NET với cơ sở dữ liệu. Do đó, bạn có thể tạo các thực thể .NET của mình được biểu thị dưới dạng cơ sở và các kiểu dẫn xuất, và EF Core có thể tạo lược đồ cơ sở dữ liệu cho bạn. Tuy nhiên, vì EF Core không tự động tìm kiếm các lớp cơ sở hoặc lớp dẫn xuất, bạn phải khai báo rõ ràng kiểu CLR trên mô hình của mình nếu bạn muốn nó được ánh xạ. Cần lưu ý rằng chỉ chỉ định loại cơ sở sẽ không đủ, tức là nó sẽ không tự động buộc EF Core bao gồm tất cả các loại phụ.
Danh sách mã sau minh họa cách bạn có thể tạo ngữ cảnh dữ liệu tùy chỉnh cho một lớp cũng như lớp con của nó.
public class DemoDbContext : DbContext {
public DbSet<Person> Person { get; set; }
public DbSet<Author> Authors { get; set; }
}
public class Person {
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Author : Person {
public string SubjectArea { get; set; }
}
Bảng mỗi thứ bậc (TPH)
Trong kiểu kế thừa Table Per Hierarchy (TPH) (đây là kiểu kế thừa mặc định trong EF Core), bạn sẽ chỉ có một bảng cho toàn bộ hệ thống phân cấp để đại diện cho tất cả các lớp. Để phân biệt giữa các loại khác nhau, cột "phân biệt" được sử dụng. Theo mặc định, bảng được đặt tên theo lớp cơ sở hoặc trường DbSet được liên kết với nó. Tên của bảng sẽ là tên của lớp cơ sở hoặc thuộc tính DbSet tương ứng của nó theo mặc định.
Đoạn mã sau minh họa cách Biểu đồ trên mỗi phân cấp có thể được biểu diễn:
public abstract class Person {
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class User : Person {
public string UserName { get; set; }
public string Password { get; set; }
}
public class Manager : Person {
public string Department { get; set; }
}
Bảng mỗi loại (TPT)
Các mối quan hệ kế thừa theo phương pháp Table Per Type (TPT) được mô tả như các khóa ngoại. Trong cách tiếp cận này, một bảng riêng biệt đại diện cho từng kiểu (bao gồm cả các kiểu trừu tượng) của chuỗi kế thừa. Các khóa ngoại được sử dụng để liên kết các bảng biểu thị các kiểu dẫn xuất với kiểu cơ sở của chúng. Trong chiến lược này, EF Core tạo một bảng cơ sở trong cơ sở dữ liệu và nhiều bảng cụ thể cho từng loại dẫn xuất.
Danh sách mã sau đây cho thấy cách tiếp cận Bảng mỗi loại (TPT) có thể được triển khai:
public abstract class Person {
public int Id { get; set; }
public string FullName { get; set; }
}
[Table("Users")]
public class User : Person {
public string UserName { get; set; }
public string Password { get; set; }
}
[Table("Managers")]
public class Manager : Person {
public string Department { get; set; }
}
Bảng trên mỗi loại bê tông (TPC)
Trong cách tiếp cận Table Per Concrete Type (TPC), mỗi kiểu cụ thể trong chuỗi kế thừa được biểu diễn bằng bảng đặc biệt trong cơ sở dữ liệu nhưng không phải là lớp trừu tượng. Các thuộc tính của loại cơ sở anyabstract được tạo dưới dạng các trường trong bảng của từng loại bê tông.
Thiết kế lớp sẽ giống như TPH. Đây là cách bạn có thể chỉ định một bảng cho từng lớp con:
public class MyDbContext : DbContext {
public DbSet<Person> Person { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Entity<User>().Map(m => {
m.MapInheritedProperties();
m.ToTable("Users");
});
modelBuilder.Entity<Author>().Map(m => {
m.MapInheritedProperties();
m.ToTable("Managers");
});
}
}
Tóm tắt
Entity Framework Core có thể được thực thi trên bất kỳ nền tảng nào hỗ trợ .NET Standard 2.1. Điều này bao gồm .NET Core 3.1 cũng như.NET 5. Tuy nhiên, nó sẽ không thực thi trên .NET Standard 2.0, có nghĩa là bắt đầu với EF Core 5.0, bạn sẽ không thể tận dụng EF Core với .NET Framework. Chúc bạn đọc vui vẻ!