Chủ đề của PRN232 - Xây dựng ứng dụng back-end đa nền tảng với .NET

PRN232 Chương 2 - Models trong Web API với Entity Framework Core

Chương 2 môn PRN232 đi vào tầng dữ liệu của Web API: định nghĩa model dạng POCO, DbContext và các thuộc tính DbSet quyết định lớp nào vào mô hình cơ sở dữ liệu, truy vấn LINQ được dịch sang SQL và thực thi trên máy chủ, Repository Pattern để tách logic truy cập dữ liệu, cùng Data Transfer Object và AutoMapper nhằm định hình dữ liệu cho client, chặn over-posting và không bao giờ trả thẳng entity chứa HashedPassword ra ngoài. Trọn bộ câu hỏi trắc nghiệm có giải thích.

Xem danh sách câu hỏi8 câu hỏi100% có giải thích

Bắt đầu bằng Chế độ học nếu bạn muốn đáp án và giải thích hiện ngay sau mỗi câu — không bấm giờ, dừng lúc nào cũng được. Chọn Thi thử khi muốn biết mình đang ở đâu: có bấm giờ, chấm điểm ở cuối, và giải thích chỉ mở sau khi nộp.

Học ngân hàng câu hỏi của chủ đề

Luyện tập theo chủ đề này

8Câu hỏi hiện có

Câu hỏi của chủ đề

8/8 câuHết danh sách
1Consider this EF Core entity:4 lựa chọncó codeTrung bình50% trả lời đúng
Đề bài
public class User {
  public int Id { get; set; }
  public string Username { get; set; }
  = String.Empty;
  public string HashedPassword { get; set; }
  = String.Empty;
  public bool IsAdmin { get; set; }
}

Which of the following would be an appropriate DTO to return to a client asking for user details?

Apublic class UserDto { public int Id { get; set; } public string Username { get; set; } }
Bpublic class UserDto { public string HashedPassword { get; set; } }
CThe User entity itself should always be returned directly.
Dpublic class UserDto { public int Id { get; set; } public string Username { get; set; } public string HashedPassword { get; set; } public bool IsAdmin { get; set; } }
Lời giải
Khi xây dựng một ứng dụng web, việc bảo vệ thông tin người dùng là rất quan trọng. Trong trường hợp này, chúng ta có một thực thể User trong EF Core với các thuộc tính Id, Username, HashedPassword và IsAdmin. Nếu một client yêu cầu thông tin chi tiết về một người dùng, chúng ta cần quyết định thông tin nào nên được trả về.
Mở trang câu hỏi này →
Đề bài
public class ApplicationDbContext : DbContext {
  public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) {
  }
  public DbSet<Product> Products { get; set; }
  public DbSet<Category> Categories { get; set; }
}
AIt scans the entire assembly for public classes.
BThrough the DbSet<T> properties defined in the DbContext.
CIt relies on XML configuration files.
DYou must manually register each class using builder.Services.AddTransient<Product>().
Lời giải

EF Core biết được các lớp nào cần bao gồm trong mô hình cơ sở dữ liệu dựa trên các thuộc tính DbSet<T> được định nghĩa trong lớp DbContext. Khi bạn tạo một thuộc tính DbSet<T>, EF Core sẽ tự động phát hiện lớp tương ứng và bao gồm nó trong mô hình cơ sở dữ liệu. Điều này giúp bạn dễ dàng quản lý các lớp và mối quan hệ giữa chúng trong ứng dụng .NET 9 sử dụng EF Core.

Mở trang câu hỏi này →
Đề bài
var result = await _context.Products .Where(p => p.IsAvailable) .OrderBy(p => p.Name) .ToListAsync();
AIt fetches all products, then filters and sorts them in the application's memory.
BIt generates a SQL query to select and order available products, which is then executed on the database server.
CIt synchronously blocks the thread until the database returns all products.
DIt deletes all products that are not available.
Lời giải
Lệnh LINQ này được sử dụng trong một dịch vụ .NET 8 sử dụng EF Core. Nó thực hiện việc truy vấn dữ liệu từ cơ sở dữ liệu. Đầu tiên, nó lọc ra các sản phẩm có trạng thái 'IsAvailable' là true. Sau đó, nó sắp xếp các sản phẩm theo tên. Tất cả các bước này được thực hiện trên cơ sở dữ liệu, không phải trong bộ nhớ của ứng dụng. Điều này giúp giảm thiểu lượng dữ liệu cần truyền tải và xử lý.
Mở trang câu hỏi này →
ATo automatically generate API documentation.
BTo abstract the data access logic, making the application more modular and testable.
CTo handle user authentication and authorization.
DTo define the routing rules for API endpoints.
Lời giải
Repository Pattern là một mô hình thiết kế được sử dụng rộng rãi trong ASP.NET Core để truy cập dữ liệu. Nó giúp abstract hóa logic truy cập dữ liệu, làm cho ứng dụng trở nên linh hoạt và dễ dàng kiểm tra hơn. Repository Pattern giúp tách biệt logic truy cập dữ liệu khỏi logic kinh doanh, giảm thiểu sự phụ thuộc và tăng cường khả năng mở rộng. Nó cũng giúp dễ dàng thay đổi cơ sở dữ liệu mà không ảnh hưởng đến logic kinh doanh. Ngoài ra, Repository Pattern giúp dễ dàng thực hiện các tính năng như caching, logging và phân trang dữ liệu.
Mở trang câu hỏi này →
5What is the main benefit of using a library like AutoMapper?4 lựa chọnDễ100% trả lời đúng
AIt automatically creates database tables from DTOs.
BIt replaces the need for Dependency Injection.
CIt automates the process of converting one object type to another (e.g., an Entity to a DTO), reducing boilerplate code.
DIt provides an alternative to JSON for data serialization.
Lời giải
AutoMapper là một thư viện giúp tự động hóa quá trình chuyển đổi giữa các loại đối tượng khác nhau. Ví dụ, khi bạn cần chuyển đổi một đối tượng Entity sang một đối tượng DTO (Data Transfer Object), AutoMapper sẽ giúp bạn thực hiện điều này một cách dễ dàng và giảm thiểu mã code lặp lại. Điều này giúp bạn tiết kiệm thời gian và công sức khi phát triển ứng dụng. Ngoài ra, AutoMapper cũng giúp bạn dễ dàng quản lý và cập nhật các mối quan hệ giữa các đối tượng, từ đó giúp bạn xây dựng các ứng dụng phức tạp và linh hoạt hơn.
Mở trang câu hỏi này →
ATo replace the need for a database.
BTo shape data specifically for the client, preventing over-posting and under-posting, and decoupling the API from the database schema.
CTo increase the performance of database queries.
DTo enforce business logic and validation.
Lời giải
DTOs (Data Transfer Objects) là một kỹ thuật được sử dụng trong xây dựng API để chuyển đổi dữ liệu từ cơ sở dữ liệu sang dạng dễ dàng sử dụng cho khách hàng. Mục đích chính của việc sử dụng DTOs là để định hình dữ liệu cụ thể cho khách hàng, ngăn chặn tình trạng quá tải (over-posting) và thiếu dữ liệu (under-posting), đồng thời tách rời API khỏi cấu trúc cơ sở dữ liệu. Điều này giúp đảm bảo rằng dữ liệu được truyền đi là chính xác và đầy đủ, cũng như giảm thiểu khả năng xảy ra lỗi do sai sót trong dữ liệu.
Mở trang câu hỏi này →
AKeep business logic inside AutoMapper profiles.
BReturn DTOs from controllers instead of EF entities.
CLet AutoMapper save changes to the database automatically.
DBind request bodies directly to domain entities.
Lời giải
Khi sử dụng DTOs và AutoMapper trong ASP.NET Core, một thực hành được khuyến nghị là trả về DTOs từ các controller thay vì các thực thể EF. Điều này giúp phân tách logic kinh doanh khỏi logic của ứng dụng và cải thiện bảo mật. Việc trả về DTOs cũng giúp giảm thiểu rủi ro bị tấn công bằng cách inject các thực thể EF vào các controller. Ngoài ra, việc sử dụng DTOs giúp dễ dàng thay đổi cấu trúc dữ liệu mà không ảnh hưởng đến các controller. Điều này giúp tăng cường khả năng mở rộng và bảo trì của ứng dụng.
Mở trang câu hỏi này →
AA static class with methods for rendering HTML.
BAn interface defining controller actions.
CA class with properties representing data, often called a POCO (Plain Old CLR Object).
DAn attribute used for routing.
Lời giải
Trong lập trình C#, một Model class được sử dụng để đại diện cho dữ liệu trong ứng dụng ASP.NET Core. Nó thường được gọi là POCO (Plain Old CLR Object), tức là một lớp với các thuộc tính đại diện cho dữ liệu. Ví dụ, nếu bạn muốn tạo một lớp đại diện cho một người dùng, bạn có thể tạo một lớp có các thuộc tính như tên, tuổi, địa chỉ, v.v. Lớp này không chứa bất kỳ logic nào, chỉ đơn giản là đại diện cho dữ liệu. Điều này giúp cho việc quản lý dữ liệu trở nên dễ dàng hơn và giúp cho ứng dụng trở nên linh hoạt hơn.
Mở trang câu hỏi này →

Đề có câu hỏi của chủ đề này

3 đề chứa ít nhất một câu thuộc chủ đề — mở đề để làm cả bộ, không chỉ từng câu.