EF Code-First - Khởi tạo DB
Khởi tạo cơ sở dữ liệu trong Code First
Ở phần này, chúng ta sẽ tìm hiểu cách Entity Framework quyết định tên cơ sở dữ liệu và máy chủ trong khi khởi tạo cơ sở dữ liệu theo cách tiếp cận Code First.
Hình dưới đây cho thấy một quy trình khởi tạo cơ sở dữ liệu, dựa trên tham số được truyền trong phương thức khởi tạo cơ sở của lớp Context được kế thừa từ lớp DbContext:
Tham số khởi tạo cơ sở dữ liệu
Theo hình trên, phương thức khởi tạo cơ sở của lớp Context có thể có tham số sau:
- Không có tham số.
- Tên cơ sở dữ liệu.
- Tên chuỗi kết nối.
Không có tham số
Nếu bạn không chỉ định tham số trong phương thức khởi tạo cơ sở của lớp Context thì nó sẽ tạo cơ sở dữ liệu trong máy chủ SQLEXPRESS cục bộ của bạn với tên khớp với {Namespace}. {Tên lớp Context}.
Ví dụ, Entity Framework (EF) sẽ tạo một cơ sở dữ liệu có tên SchoolDataLayer.Context
cho lớp Context sau:
namespace SchoolDataLayer
{
public class Context: DbContext
{
public Context(): base()
{ }
}
}
Tên cơ sở dữ liệu
Bạn cũng có thể chỉ định tên cơ sở dữ liệu làm tham số trong phương thức khởi tạo cơ sở của lớp Context.
Nếu bạn chỉ định tham số tên cơ sở dữ liệu, thì Code First sẽ tạo cơ sở dữ liệu với tên bạn đã chỉ định trong phương thức khởi tạo cơ sở trong máy chủ cơ sở dữ liệu SQLEXPRESS cục bộ.
Ví dụ, Code First sẽ tạo cơ sở dữ liệu có tên MySchoolDB cho lớp Context sau.
namespace SchoolDataLayer
{
public class Context: DbContext
{
public Context(): base("MySchoolDB")
{ }
}
}
Tên chuỗi kết nối
Bạn cũng có thể chỉ định chuỗi kết nối trong app.config hoặc web.config và chỉ định tên chuỗi kết nối bắt đầu bằng "name =" trong phương thức khởi tạo cơ sở của lớp Context.
Hãy xem xét ví dụ sau nơi chúng ta truyền tham số name=SchoolDBConnectionString
trong phương thức khởi tạo cơ sở.
namespace SchoolDataLayer
{
public class Context: DbContext
{
public SchoolDBContext() : base("name=SchoolDBConnectionString")
{
}
}
}
App.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="SchoolDBConnectionString"
connectionString="Data Source=.;Initial Catalog=SchoolDB;Integrated Security=true"
providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>
Trong lớp Context ở trên, chúng tôi chỉ định tên chuỗi kết nối làm tham số. Xin lưu ý rằng tên chuỗi kết nối phải bắt đầu bằng "name =", nếu không, nó sẽ coi nó là tên cơ sở dữ liệu.
Tên cơ sở dữ liệu trong chuỗi kết nối trong App.config là SchoolDB. Entity Framework (EF) sẽ tạo cơ sở dữ liệu SchoolDB mới hoặc sử dụng cơ sở dữ liệu SchoolDB hiện có trong SQL Server cục bộ.
Đảm bảo rằng bạn có thuộc tính providerName="System.Data.SqlClient"
cho cơ sở dữ liệu SQL Server trong chuỗi kết nối.