Kết nối

[Entity Framework] Phần 4: Tạo cơ sở dữ liệu trước (Database First)

67.193 lượt xem 
 Cập nhật lần cuối: 20/04/2017 lúc 22:08:44

Cách tiếp theo để xây dựng 1 ứng dụng phần mềm là Database First, tức là xây dựng cơ sở dữ liệu trước rồi mới đến việc xây dựng mã nguồn ứng dụng. Database First cho phép chúng ta đảo ngược 1 mô hình từ 1 database đã tồn tại từ trước. Mô hình này được lưu trong tập tin tên là EDMX (.edmx) và có thể xem và chỉnh sửa trong Entity Framework Designer (phần thiết kế Entity Framework). Các lớp bạn tương tác trong ứng dụng sẽ được tự động phát sinh từ tập tin EDMX.

1. Tạo 1 database
Trước hết, bạn phải tạo 1 database để có thể truy cập dữ liệu. Server database có thể cài đặt ở những nơi khác nhau tùy thuộc vào phiên bản Visual Studio.

  • Nếu VS 2010 thì bạn tạo trong SQL Express
  • Nếu dùng VS 2012 thì bạn tạo trong LocalDb
  • Hoặc bạn cũng có thể tạo bất kỳ đầu miễn là SQL Server

Để tạo database trong Visual Studio, chọn View -> Server Explorer. Chuột phải vào Database Connections -> Add Connections… Bạn có thể kết nối với (localdb)\v11.0 hoặc SQL Express .\SQLEXPRESS tùy theo cái nào bạn đã cài. Sau đó điền tên database là DammioDatabaseFirst.

Tiếp đến chọn OK, bạn sẽ được hỏi tạo mới database vừa đặt tên, chọn Yes để tạo mới database. Sau đó, chuột phải lên database vừa tạo, chọn New Query và copy & paste đoạn script sql, và nhấn Excute (Ctrl + Shift + E) để thực thi.

CREATE TABLE [dbo].[Blogs] ( 
    [BlogId] INT IDENTITY (1, 1) NOT NULL, 
    [Name] NVARCHAR (200) NULL, 
    [Url]  NVARCHAR (200) NULL, 
    CONSTRAINT [PK_dbo.Blogs] PRIMARY KEY CLUSTERED ([BlogId] ASC) 
); 
 
CREATE TABLE [dbo].[Posts] ( 
    [PostId] INT IDENTITY (1, 1) NOT NULL, 
    [Title] NVARCHAR (200) NULL, 
    [Content] NTEXT NULL, 
    [BlogId] INT NOT NULL, 
    CONSTRAINT [PK_dbo.Posts] PRIMARY KEY CLUSTERED ([PostId] ASC), 
    CONSTRAINT [FK_dbo.Posts_dbo.Blogs_BlogId] FOREIGN KEY ([BlogId]) 

REFERENCES [dbo].[Blogs] ([BlogId]) ON DELETE CASCADE 
);

Execute_Db
Thực thi đoạn script sql để tạo mới các bảng cho database.
.

2. Tạo ứng dụng
Sau khi tạo database xong, chúng ta sẽ xây dựng 1 ứng dụng C# console dùng Database First để thực hiện truy cập. Mở Visual Studio, chọn File -> New -> Project… Chọn Visual C# từ bên menu trái và chọn Console Application, đặt tên dự án là DammioDatabaseFirst, chọn OK.

3. Xây dựng mô hình
Bước tiếp theo là xây dựng mô hình bằng cách sử dụng Entity Framework Designer, được tích hợp sẵn trong Visual Studio.

Với VS 2013, chọn Project -> Add New Item…, sau đó chọn Data từ menu trái và chọn ADO.NET Entity Data Model, điền tên cho mô hình là DammioModel và nhấn OK. Sau đó 1 cửa sổ Entity Data Model Wizard sẽ hiện lên, chúng ta chọn EF Designer from database, nhấn Next và chọn database cũng như đặt tên cho chuỗi kết nối tới database là DammioDatabaseFirstEntities.

Liên quan:  [Entity Framework] Phần 5: Tạo mô hình trước (Model First)

Trong cửa sổ Entity Data Model Wizard, nhấn chọn Tables để chọn các bảng sẽ được gieo thành các lớp mã nguồn, sau đó nhấn Finish.

Sau khi bạn nhấn Finish để tạo mô hình, tập tin EDMX được tạo với nội dung là 1 mô hình database như hình sau.

4. Đọc và ghi dữ liệu
Từ mô hình đã xây dựng được, các bạn có thể truy cập dữ liệu dựa trên tập tin EDMX với các tập tin con là DammioModel.ttDammioModel.Context.tt.

Sau đó thực hiện đoạn mã sau để thêm 1 Blog mới và sau đó hiển thị tất cả các Blog từ database sắp xếp theo thứ tự chữ cái theo Name.

class Program 
{ 
    class Program
    {
        static void Main(string[] args)
        {
            // DammioDatabaseFirstEntities kế thừa từ DbContext
            using (var db = new DammioDatabaseFirstEntities())
            {
                // Tạo và lưu 1 blog mới vào database
                Console.Write("Dien ten cua 1 blog moi: ");
                var name = Console.ReadLine();

                var blog = new Blog { Name = name };
                db.Blogs.Add(blog);
                db.SaveChanges();

                // Hiển thị tất cả các blog trong database
                var query = from b in db.Blogs
                            orderby b.Name
                            select b;

                Console.WriteLine("Tat ca cac blog trong database:");
                foreach (var item in query)
                {
                    Console.WriteLine(item.Name);
                }

                Console.WriteLine("Nhan bat ky phim nao de thoat ... -- dammio.com");
                Console.ReadKey();
            }
        } 
    }
}

5. Vấn đề thay đổi mô hình
Nếu database thay đổi thì bạn có thể dễ dàng thay đổi mô hình mã nguồn. Trong database, chúng ta thêm 1 bảng Users mới bằng đoạn query như sau:

CREATE TABLE [dbo].[Users] 
(
    [Username] NVARCHAR(50) NOT NULL PRIMARY KEY,  
    [DisplayName] NVARCHAR(MAX) NULL 
)

Sau đó để cập nhật mô hình, chúng ta mở file EDMX, chuột phải chọn Update Model from Database… để bật cửa sổ Update Wizard. Ở tab Add của Update Wizard chọn Tables, sau đó chọn bảng mới cần gieo mã nguồn. Tab Refresh để làm tươi các bảng trong mô hình, tab Delete để xóa bất kỳ bảng nào bạn không muốn có mặt trong mô hình.

Nhấn Ctrl + Save để lưu nội dung tập tin EDMX lai, khi đó VS sẽ tự động gieo mã nguồn và thêm lớp mới User.cs.

namespace DammioDatabaseFirst
{
    using System;
    using System.Collections.Generic;
    
    public partial class User
    {
        public string Username { get; set; }
        public string DisplayName { get; set; }
    }
}

Kết luận: Bài viết này giúp bạn nắm cách cơ bản để gieo mã nguồn từ database bằng Entity Framework, tương tác với database và thay đổi mô hình khi cần thiết. Nội dung chi tiết các lớp code và cách sử dụng tương tác với database khác như xóa, sửa, … sẽ được trình bày ở các bài tiếp theo.

Trích dẫn bài viết
  • APA:
    Dammio. (2017). [Entity Framework] Phần 4: Tạo cơ sở dữ liệu trước (Database First). https://www.dammio.com/2017/03/22/entity-framework-phan-4-tao-co-so-du-lieu-truoc-database-first.
  • BibTeX:
    @misc{dammio,
    author = {Dammio},
    title = {[Entity Framework] Phần 4: Tạo cơ sở dữ liệu trước (Database First)},
    year = {2017},
    url = {https://www.dammio.com/2017/03/22/entity-framework-phan-4-tao-co-so-du-lieu-truoc-database-first},
    urldate = {2024-09-29}
    }
Theo dõi
Thông báo của
guest
4 Góp ý
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
Sơn
Sơn
7 năm trước

Bài hay và dịch kỹ quá, lần đầu thấy trang web kiểu này!

Long
Long
6 năm trước

From b in db.Blogs là dùng ngôn ngữ gì thế ad?

4
0
Rất thích suy nghĩ của bạn, hãy bình luận.x