Chuỗi kết nối trong Entity Framework Core

Trong Entity Framework Core, có thể có nhiều cơ sở dữ liệu cần được kết nối hoặc nếu bất kỳ nhà cung cấp cơ sở dữ liệu nào cần kết nối với cơ sở dữ liệu.

  • Chuỗi kết nối được sử dụng để thiết lập kết nối giữa cơ sở dữ liệu và các nhà cung cấp cơ sở dữ liệu.
  • Chuỗi kết nối có thể có dữ liệu nhạy cảm từ cơ sở dữ liệu, dữ liệu này cần được bảo vệ và có thể được thực hiện bằng cách sử dụng công cụ Trình quản lý bí mật (Secret Manager tool).
  • Chuỗi kết nối là cần thiết để cấu hình dựa trên môi trường, chẳng hạn như phát triển (development), thử nghiệm (testing) và sản xuất (production).

Cấu hình chuỗi kết nối trong Entity Framework Core

Sau khi tạo chuỗi kết nối giữa cơ sở dữ liệu và các nhà cung cấp cơ sở dữ liệu, chúng ta cần cung cấp cho nó cho DbContext để xử lý dữ liệu cho ứng dụng.

Có một số phương pháp để cấu hình các chuỗi kết nối cho DbContext.

Phương pháp cấu hình OnConfiguring

Trên DbContext nhu cầu dữ liệu của họ phải được cập nhật thường xuyên để cung cấp kết quả tốt hơn, để duy trì thủ tục này các dữ liệu cần phải được ghi đè lên DbContext.

  • Để ghi đè dữ liệu mọi lúc trên DbConetxt bằng cách sử dụng chuỗi kết nối, phương thức OnConfiguring được sử dụng để ghi đè dữ liệu.
  • Nhược điểm duy nhất của phương thức OnConfiguring là nếu nó được sử dụng trên chuỗi kết nối, nó sẽ ghi đè lên tất cả các cấu hình khác cho cơ sở dữ liệu đó.
protected override void OnConfiguring(DbContextOptionsBuilder opBuilder)
{
    opBuilder.UseSqlServer("server=.;database=myEFCoreDB;trusted_connection=true;");
}

Cấu hình chuỗi kết nối như là service

Trong các ứng dụng .NET Core sử dụng Entity Framework Core, chuỗi kết nối có thể được cấu hình bằng phương thức mở rộng AddDbContext của IServiceCollection trong lớp Startup.

Trong Entity Framework Core, chuỗi kết nối có thể được cấu hình cho DbContext để sử dụng trong các ứng dụng ASP.NET Core MVC và ứng dụng .NET Core Console.

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<MyEFCoreDbContext>(options => 
    {
        options.UseSqlServer("server=.;database=myEFCoreDb;trusted_connection=true;"));
    });
}

Ứng dụng ASP.NET Core MVC

Trước đây trong ASP.NET, chuỗi kết nối được lưu trữ trong file web.config, nhưng bây giờ ASP.NET Core có thể trích xuất và đọc các chuỗi kết nối từ các vị trí khác nhau, chẳng hạn như file appsettings.json, đối số dòng lệnh và biến môi trường, v.v.

ASP.NET Core sử dụng mô hình kiến trúc Model-View-Controller (MVC). Mô hình này chia ứng dụng thành ba thành phần chính là model, view và controller.

Các thành phần này làm việc cùng nhau để cung cấp các kết quả yêu cầu từ mô hình.

Trong bất kỳ ứng dụng MVC nào sử dụng Entity Framework Core, DbContext được đưa vào (inject) bằng cách sử dụng dependency injection trong phương thức ConfigureServices trong lớp Startup.

Để đọc thông tin cấu hình từ lớp Startup, cần có một đối tượng IConfiguration, đối tượng này có thể được đưa vào (inject) bằng dependency injection.

Sau đó, các nhà phát triển có thể sử dụng phương thức GetConnectionString của IConfiguration để đọc cấu hình chuỗi kết nối trong file appsettings.json.

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<EFCoreDBContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("EFCoreDBContext")));

        services.AddIdentity<ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores<EFCoreDBContext>()
            .AddDefaultTokenProviders();

        services.AddRazorPages();
     }
}

Khi chương trình khởi chạy, chuỗi kết nối sẽ được truyền vào cho DbContext.

Để điều này xảy ra, cần phải tạo một lớp context EFCoreDBContext kế thừa từ lớp DbContext.

public partial class EFCoreDBContext : DbContext
{
    public EFCoreDBContext ()
    {
    }

    public EFCoreDBContext(DbContextOptions<EFCoreDBContext> options) : base(options)
    {
    }

    public virtual DbSet<Actors> Actors{ get; set; }
    public virtual DbSet<Movies> Movies{ get; set; }
    public virtual DbSet<Biographies> Biographies{ get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            //warning You can move this code to protect potentially senstive information
            //in connection string.

            optionsBuilder.UseSqlServer("Data Source= .;Initial Catalog=EFCoreDB;User ID=test;Password=test123");
        }
    }
}

Entity Framework Core cung cấp phương thức mở rộng AddDbContext, có thể được sử dụng để đăng ký lớp context của chúng ta.

Các tùy chọn của DbContext được cấu hình bằng cách sử dụng DbContextOptionBuilder. SQL Server được cấu hình làm nhà cung cấp cơ sở dữ liệu thông qua phương thức UseSQLServer.

Ứng dụng .NET Core Console

Trong ứng dụng .NET Core, dependency injection được thiết lập theo cách thủ công không giống như ASP.NET Core, sử dụng để thực hiện việc này tự động.

  • Tập tin appsettings.json không được tạo ra trong .NET Core, do đó nó phải được tạo ra thủ công.
  • Để đọc chuỗi kết nối trong ứng dụng .NET Core Console, nhà phát triển phải khởi tạo IConfigurations.

Để làm điều đó, cần cài đặt các gói sau:

  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.FileExtensions
  • Microsoft.Extensions.Configuration.Json

Sau khi cài đặt thành công, các chuỗi kết nối có thể được đọc bằng mã dưới đây:

class Program
{
    static void Main(string[] args)
    {
        var newbuilder = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json");

        IConfiguration iconfig = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json", true, true)
            .Build();

        Console.WriteLine($" Hello { iconfig["fullname"] } !");
    }
}

Để truyền thêm chuỗi kết nối cho DbContext, hãy tạo thêm một lớp context. Để tham khảo lớp context, hãy xem ví dụ ứng dụng ASP.NET Core MVC ở phía trên.

Đây là cách chuỗi kết nối được cung cấp cho DbContext để sử dụng cho ứng dụng ASP.NET Core MVC và ứng dụng .NET Core Console.

Entity Framework CoreASP.NET Core MVCASP.NET Core
Bài Viết Liên Quan:
ConnectionString cho Entity Framework Core từ A-Z
Trung Nguyen 15/10/2021
ConnectionString cho Entity Framework Core từ A-Z

Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách thiết lập các chuỗi kết nối cho SQL Server, Azure SQL, SQLite, PostgreSQL, MySQL và MariaDB.

Cấu hình trong Entity Framework Core
Trung Nguyen 03/04/2021
Cấu hình trong Entity Framework Core

Trong hướng dẫn này, bạn sẽ tìm hiểu cách cấu hình sử dụng attribute, Fluent API để ghi đè các quy ước mặc đình trong Entity Framework Core.

Các quy ước trong Entity Framework Core
Trung Nguyen 03/04/2021
Các quy ước trong Entity Framework Core

Bạn sẽ tìm hiểu các quy ước được tính hợp sẵn trong Entity Framework Core để tạo khóa chính, khóa ngoại, bảng, lược đồ, cột, kiểu dữ liệu, index ...

Quản lý mối quan hệ Một - Nhiều trong Entity Framework Core
Trung Nguyen 03/04/2021
Quản lý mối quan hệ Một - Nhiều trong Entity Framework Core

Trong hướng dẫn này, bạn sẽ tìm hiểu cách tạo, sửa đổi và xóa mối quan hệ một - nhiều trong Entity Framework Core.