Sunday, August 7, 2016

I. Entity Framework là gì? Các thành phần của Entity Framework

I. Entity Framework là gì? Các thành phần của Entity Framework

Entity Framework là một bộ ánh xạ đối tượng – quan hệ cho phép người lập trình .NET  làm việc với dữ liệu quan hệ qua các đối tượng (object) nó giúp lập trình viên không cần viết mã cho (hầu hết) những gì liên quan đến truy cập dữ liệu. 

Các thành phần trong Entity Framework:
Code là mã lệnh tạo thành các lớp đối tượng dữ liệu cho phép thao tác với dữ liệu.
Model là sơ đồ gồm các hộp mô tả các thực thể và các đường nối kết mô tả các quan hệ.
Database là cơ sở dữ liệu (có thể là SQL Server, Compact SQL Server, Local database, MySQL, Oracle,…)

Có 3 cách sử dụng Entity Framework: Code First, Models First, Database First.
Gii thiu v Entity Framework - So snh gia Entity Framework vi LINQ to SQL

- Database first: là phương pháp chỉ nên dùng khi ta đã có sẵn CSDL (không phải tạo), EF Wizard sẽ tạo Model và Code cho ta.
- Models first: nên dùng khi ta bắt đầu thiết kế CSDL từ đầu (từ chưa có gì). Ta sẽ thiết kế mô hình CSDL (Model) EF sẽ tự tạo code cho ta, sau đó nhờ EF Wizard tạo CSDL.
- Code first: nên dùng khi đã có mô hình CSDL, ta sẽ chỉ viết code từ đó tạo Database.

Dù cách nào thì cuối cùng cũng phải có Code để thao tác trong mã lệnh và Database để lưu trữ dữ liệu. Model chỉ là một thành phần trung gian.

Theo kinh nghiệm của nhiều lập trình viên đi trước, Code First là phương án mềm dẻo nhất (hơi mất công ngồi gõ code, tuy nhiên nếu dùng tốt code snippets thì đỡ nhiều).

Trước đây khi lập trình CSDL trong VB, VC,… ta luôn tạo CSDL liệu trước, sau đó mới xây dựng mã lệnh truy cập dữ liệu.

Trong bài này tôi sẽ hướng dẫn tạo 1 project Code First với cơ sở dữ liệu có sẵn.

II. Bắt đầu làm việc với Entity Framework

Để làm việc với Entity Framework một cách hoàn chỉnh chúng ta phải cài thêm Entity Framework bản mới nhất từ NuGet:

B1. Tạo Project mới

B2. Cài EF Power Tools vào Visual Studio: Tools -> Library Paskage Manager -> Manage NuGet Packages for Solution…
Gii thiu v Entity Framework - So snh gia Entity Framework vi LINQ to SQLGii thiu v Entity Framework - So snh gia Entity Framework vi LINQ to SQL

Bến trái, chọn Online. Nhập Entity Framework Power Tools vào khung Search (góc trên, bên phải) chọn Entity Framework Power Tools -> Install. 

Khi đã cài được, bạn chuột phải trên tên Project sẽ thấy có menu Entity Framework.



2 Answers

0

III. Tạo một ứng dụng Entity Code First sử dụng CSDL có sẵn

Code First tức là bạn phải code sau đó sinh Database từ code đó. Nhưng Database tạo ra như thế sẽ ít thuộc tính: ràng buộc, identity, unique... Giải pháp là tạo 1 database hoàn chỉnh trên SQL sau đó viết code để map CSDL với Entity của chúng ta.

Trước hết tạo ra các class mô tả các bảng trong CSDL của chúng ta, nó bao gồm các trường và thuộc tính, kiều của chúng.

public partial class tbLop
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int IdLop { get; set; }
 
    [StringLength(50)]
    public string Lop { get; set; }
}
public partial class tbHocVien
{
    [Key]
    public int IdHocVien { get; set; }
 
    public int? IdLop { get; set; }
 
    [StringLength(50)]
    public string HoTen { get; set; }
 
    [Column(TypeName = "date")]
    public DateTime? NgaySinh { get; set; }
}
Sau đó tạo 1 class Context - là class quản lý tất cả các bảng và giao tiếp với Entity, nó tương tự như class DataContext trong LINQ to SQL.
public partial class DataContext : DbContext
{
    /// <summary>
    /// Connection string lưu ở App.config
    /// theo name="DataContext"
    /// </summary>
    public DataContext()
        : base("name=DataContext")
    {
    }
 
    public virtual DbSet<tbHocVien> tbHocViens { get; set; }
    public virtual DbSet<tbLop> tbLops { get; set; }
}
Trong App.config ta thiết đặt ConnectionString để class Conext liên kết với CSDL đã có sẵn.
<connectionStrings>
    <add name="DataContext" connectionString="data source=\SQLEXPRESS;initial catalog=db_EF;persist security info=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>
Cách này rất thủ công và dễ xảy ra sai sót. Để làm việc này chúng ta có thể cài thêm 1 tool của Visual Studio giúp ta tạo Code First từ Database một cách nhanh chóng, chính xác.
Các bạn download tool http://www.microsoft.com/en-us/download/details.aspx?id=40762
Sau khi tải về và cài đặt, khởi động lại Visual Studio, tạo 1 Entity mới ta sẽ thấy rõ hơn.

Thêm 1 Entity Model, chọn "Code First from Database"
Gii thiu v Entity Framework - So snh gia Entity Framework vi LINQ to SQL

Chọn Database có sẵn
Gii thiu v Entity Framework - So snh gia Entity Framework vi LINQ to SQL

Nếu chưa có thì chọn New Connection

Chọn các bảng/view/store để add vào Model
Gii thiu v Entity Framework - So snh gia Entity Framework vi LINQ to SQL

Sau đó nó sẽ tự sinh ra các class như trên và ConnectionString được lưu trong App.config
Nếu chưa làm được có thể xem http://msdn.microsoft.com/en-us/data/jj200620.aspx

Sau khi khai báo các đối tượng của Entity ta có thể sử dụng nó tương tự như đối với LINQ to SQL. Hướng dẫn chi tiết các điểm khác nhau tôi sẽ viết trong 2 bài khác.

IV. So sánh giữa Entity Framework với LINQ to SQL

Sau một thời gian sử dụng Entity tôi rút ra được một số nhận định ban đầu như sau:

LINQ to SQL

- Chỉ làm việc với CSDL của SQL Server
- Tạo ra file .dbml
- Không hỗ trợ các kiểu phức tạp
- Không thể tạo CSDL từ đối tượng
- Chỉ có kiểu ánh xạ 1-1 giữa đối tượng class với table/views
- Sử dụng DataContext

Entity Framework

- Có thể làm việc với các CSDL: Oracle, DB2, MySQL, SQL Server...
- Tạo ra file .edmx, .csdl, .msl, .ssdl hoặc các file class .cs thông thường
- Hỗ trợ các kiểu phức tạp
- Có thể tạo CSDL từ Model/Code đã thiết kế
- Có thể ánh xạ 1-1, 1-nhiều, nhiều-1, nhiều-nhiều giữa đối tượng entity với table/view
- Sử dụng DbContext, Entity SQL, ObjectContext.

Và hơn nữa mô hình Code First sinh ra các class riêng biệt => có thể dễ dàng thay đổi khi thay đổi CSDL

No comments:

Post a Comment