Chuyển đến nội dung chính

Tìm hiểu về Code First and Migration

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.

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

Enable-Migrations
Migrations 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).
Để cập nhật property Url, bạn dùng lệnh Add-Migration
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
Tham khảo: msdn.microsoft.com/en-us/data/jj591621.aspx

Nhận xét

Bài đăng phổ biến từ blog này

[ASP.NET MVC] Authentication và Authorize

Một trong những vấn đề bảo mật cơ bản nhất là đảm bảo những người dùng hợp lệ truy cập vào hệ thống. ASP.NET đưa ra 2 khái niệm: Authentication và Authorize Authentication xác nhận bạn là ai. Ví dụ: Bạn có thể đăng nhập vào hệ thống bằng username và password hoặc bằng ssh. Authorization xác nhận những gì bạn có thể làm. Ví dụ: Bạn được phép truy cập vào website, đăng thông tin lên diễn đàn nhưng bạn không được phép truy cập vào trang mod và admin.

ASP.NET MVC: Cơ bản về Validation

Validation (chứng thực) là một tính năng quan trọng trong ASP.NET MVC và được phát triển trong một thời gian dài. Validation vắng mặt trong phiên bản đầu tiên của asp.net mvc và thật khó để tích hợp 1 framework validation của một bên thứ 3 vì không có khả năng mở rộng. ASP.NET MVC2 đã hỗ trợ framework validation do Microsoft phát triển, tên là Data Annotations. Và trong phiên bản 3, framework validation đã hỗ trợ tốt hơn việc xác thực phía máy khách, và đây là một xu hướng của việc phát triển ứng dụng web ngày nay.

Tổng hợp một số kiến thức lập trình về Amibroker

Giới thiệu về Amibroker Amibroker theo developer Tomasz Janeczko được xây dựng dựa trên ngôn ngữ C. Vì vậy bộ code Amibroker Formula Language sử dụng có syntax khá tương đồng với C, ví dụ như câu lệnh #include để import hay cách gói các object, hàm trong các block {} và kết thúc câu lệnh bằng dấu “;”. AFL trong Amibroker là ngôn ngữ xử lý mảng (an array processing language). Nó hoạt động dựa trên các mảng (các dòng/vector) số liệu, khá giống với cách hoạt động của spreadsheet trên excel.