Khi làm việc với Entity Framework, bạn có rất nhiều sự lựa chọn để tiếp cận và giải quyết vấn đề. Bạn có thể sử dụng mô hình Database First, Model First hoặc Code First.
Với 2 mô hình đầu, bạn sẽ tiếp cận theo hướng Database nhiều hơn, và việc cập nhật Model sẽ rất dễ dàng thông qua câu lệnh “Update Model from Database”.
Với Code First, bạn sẽ rất vất vả vì phải định nghĩa POCO class. Không sao, đã có EF Power Tools hỗ trợ nếu bạn có sẵn database. Một cái lợi thứ 2 là bạn dễ dàng nâng cấp hoặc hạ cấp phiên bản database đang sử dụng. Một cái lợi thứ 3 nữa là 1 ngày đẹp trời nào đó, bạn không thích dùng Entity Framework, và chuyển sang MongoDb hoặc Peta POCO... Hiii, bạn đã có class thuần.
Để kết nối xuống Database, bạn cần tạo lớp Context kế thừa từ DbContext. Khi đó, nó sẽ ánh xạ Model xuống các Table.
Trong file Program.cs, bạn thực hiện đoạn lệnh sau:
Trường hợp bạn không cung cấp chuỗi kết nối, database sẽ được tự động tạo ở đường dẫn: C:\User\<Windows User Name>\<Db name>
Để cập nhật database schema, bạn cần sử dụng Code First Migrations.
Mở Package Manager Console
Gõ
Để update Database schema với file Migration vừa tạo, bạn dùng lệnh
Với 2 mô hình đầu, bạn sẽ tiếp cận theo hướng Database nhiều hơn, và việc cập nhật Model sẽ rất dễ dàng thông qua câu lệnh “Update Model from Database”.
Với Code First, bạn sẽ rất vất vả vì phải định nghĩa POCO class. Không sao, đã có EF Power Tools hỗ trợ nếu bạn có sẵn database. Một cái lợi thứ 2 là bạn dễ dàng nâng cấp hoặc hạ cấp phiên bản database đang sử dụng. Một cái lợi thứ 3 nữa là 1 ngày đẹp trời nào đó, bạn không thích dùng Entity Framework, và chuyển sang MongoDb hoặc Peta POCO... Hiii, bạn đã có class thuần.
Code First
Tạo dự án Console Application tên BlogExample. Cài đặt Entity Framework thông qua Package Manager Console:Install-Package EntityFramework
Tạo Model
public class Blog
{
public int BlogId { get; set; }
public string Name { get; set; }
public virtual List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public virtual Blog Blog { get; set; }
}
Từ khóa virtual (trong virtual Blog Blog) cho phép trì hoãn (lazy loading) việc lấy dữ liệu cho tới khi chúng thực sự cần đến.Khởi tạo Context
Mỗi Model tương ứng với 1 table. VD: Model Blog tương ứng với Blogs trong Database.Để kết nối xuống Database, bạn cần tạo lớp Context kế thừa từ DbContext. Khi đó, nó sẽ ánh xạ Model xuống các Table.
public class BloggingContext : DbContext
{
public BloggingContext():base("BlogExample")
{
}
public BloggingContext(string connectionString): base(connectionString)
{ }
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
}
base(connectionString): nhận vào chuỗi kết nối hoặc key chứa trong App.Config (hoặc Web.Config)Trong file Program.cs, bạn thực hiện đoạn lệnh sau:
static void Main(string[] args)
{
using (var db = new BloggingContext("BlogExample"))
{
// Create and save a new Blog
Console.Write("Enter a name for a new Blog: ");
var name = Console.ReadLine();
var blog = new Blog { Name = name };
db.Blogs.Add(blog);
db.SaveChanges();
// Display all Blogs from the database
var query = from b in db.Blogs
orderby b.Name
select b;
Console.WriteLine("All blogs in the database:");
foreach (var item in query)
{
Console.WriteLine(item.Name);
}
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
Trường hợp không có database, chương trình tự động tạo database mới dựa vào Connection String được cung cấp trong Blogging Context.Trường hợp bạn không cung cấp chuỗi kết nối, database sẽ được tự động tạo ở đường dẫn: C:\User\<Windows User Name>\<Db name>
Migration
Trường hợp bạn thay đổi Model (ví dụ như thêm propery Url vào Model Blog), bạn sẽ gặp thông báo:The model backing the 'BloggingContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).
Để cập nhật database schema, bạn cần sử dụng Code First Migrations.
Mở Package Manager Console
Gõ
Enable-MigrationsMigrations folder tên sẽ được tạo trong Project. Và nó chứa 2 file:
- Configuration.cs: Đây là lớp dùng để cấu hình Migration. Bạn không cần chỉnh sửa file này.
- Tập tin <timestamp>_InitialCreate.cs: Đây là tập tin Migration đầu tiên của chương trình. Nó bao gồm Blog và Post (nhưng không kèm Url mới vừa được thêm).
Add-Migration <Migration name>=> tạo ra tập tin Migration mới trong thư mục Migrations
Để update Database schema với file Migration vừa tạo, bạn dùng lệnh
Update-Database=> Cột Url sẽ được tự động thêm vào Database.
Một số lưu ý:
- Phát sinh SQL query script từ version đầu tiên tới version xx nào đó:
Update-Database -Script -SourceMigration: $InitialDatabase -TargetMigration: <Your target version>
- Phát sinh SQL query script từ version A tới version B:
Update-Database -Script -SourceMigration: <Version A Name> -TargetMigration: <Your target version B>
- Nếu muốn quay trở về Migration cũ, dùng:
Update-Database -TargetMigration:"<migration name"
- Xem câu lệnh SQL thực hiện khi dùng Update-Database:
Update-Database –Verbose
Deploy on Server
Có 2 cách deploy lên server:- Chỉnh sửa connection string, rồi kết nối lên SQL Server trên server, thực hiện câu lệnh Update-Database
- Tạo script SQL rồi thực thi đoạn script trên server. Để tạo đoạn script, bạn dùng câu lệnh:
Update-Database -Script
Nhận xét
Đăng nhận xét