Buổi 7 Mô hình CSDL Entity Framework code first Trần Minh Thái Chương 0
Mục tiêu Các thao tác cấu hình cho ứng dụng dùng mô hình CSDL Entity FrameWork code first Tạo CSDL Cài đặt SqlServer Compact Một số thao tác cơ bản trên CSDL Chương 0
Tạo CSDL
Mục tiêu Tìm hiểu về việc xây dựng CSDL Có thể dùng CSDL SQL Server, SQL Compact SQL Compact có thể được triển khai như 1 phần của project mà không yêu cầu máy client phải cài đặt SQL Server Việc truy vấn LINQ với mô hình Entity Framework (EF) hay LINQ to SQL để thay thế ADO.Net giúp xây dựng các ứng dụng CSDL cũng trở nên đơn giản và thống nhất hơn
C1. Cấu hình EF và SQL Compact Add references EntityFramework.dll System.Data.Entity.dll System.ComponentModel.DataAnnotations.dll (Các Attribute định nghĩa CSDL)
C1. Cấu hình EF và SQL Compact EntityFramework được tích hợp sẵn khi cài Visual Studio “C:\Program Files\Microsoft Visual Studio\2017\Community\Common7\IDE”
C1. Cấu hình EF và SQL Compact EntityFramework được tích hợp sẵn khi cài Visual Studio “C:\Program Files\Microsoft Visual Studio\2017\Community\Common7\IDE”
C1. Cấu hình EF và SQL Compact System.Data.Entity.dll là thư viện hệ thống (System) trong Assemblies của hệ thống
C1. Cấu hình EF và SQL Compact System.ComponentModel.DataAnnotations.dll “C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2”
C2. Cấu hình EF và SQL Compact Cài đặt bằng Nuget Vào menu Tool\NuGet Package Manager\Package Manager Console Install-Package EntityFramework Visual Studio tự động download gói EF trong thư mục Packages, và tự động add các thư viện dll vào dự án
Cấu hình EF và SQL Compact Sau khi add reference thành công
Khai báo Model và dữ liệu mặc định
B1. Tạo lớp Model định nghĩa bảng DL Tạo thư mục Model, và định nghĩa các Lớp tương ứng (các bảng DL) VD: Định nghĩa lớp Category chứa 2 thành phần dữ liệu (ID: Mã loại, Name: Tên loại) namespace EntityFrameWorkExample.View { public class Category public int ID { get; set; } public string Name { get; set; } }
B2. Định nghĩa mô hình CSDL Tạo Lớp kế thừa DbDataContext để định nghĩa mô hình CSDL dùng Entity Framework VD: Tạo lớp MyEntity using System.Data.Entity; using System.Data.Entity.ModelConfiguration.Conventions; namespace EntityFrameWorkExample.View { public class MyEntity: DbContext public DbSet<Category> Categories { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); }
B3. Tạo dữ liệu khởi tạo ban đầu Tạo Lớp dữ liệu ban đầu cho ứng dụng bằng cách hiện thực IDatabaseInitializer<TContext> Cho phép xóa, tạo lại và c ung cấp lại dữ liệu cho CSDL khi CSDL được tạo Để cung cấp giá trị cho CSDL, tạo một lớp dẫn xuất và override phương thức Seed
VD: Tạo lớp DefaultData chứa DL ban đầu cho bảng Category namespace EntityFrameWorkExample.View { public class DefaultData : DropCreateDatabaseIfModelChanges<MyEntity> protected override void Seed(MyEntity context) new List<Category> new Category { ID = 1, Name = "Category 1" }, new Category { ID = 2, Name = "Category 2" }, new Category { ID = 3, Name = "Category 3" }, new Category { ID = 4, Name = "Category 4" }, new Category { ID = 5, Name = "Category 5" } }.ForEach(m => context.Categories.Add(m)); }
B4. Đăng ký dữ liệu mặc định using System.Windows; using System.Data.Entity; using EntityFrameWorkExample.View; namespace EntityFrameWorkExample { /// <summary> /// Interaction logic for App.xaml /// </summary> public partial class App : Application protected override void OnStartup(StartupEventArgs e) base.OnStartup(e); Database.SetInitializer(new DefaultData()); }
Cài đặt Sql Server Compact cho EF
Cài đặt Sql Server Compact cho EF Sau khi cài đặt xong, kiểm tra cài đặt trong file App.config của Project ứng dụng
var db = new MyEntity(); Các thao tác cơ bản var db = new MyEntity(); Giả sử có đối tượng category thuộc lớp Category 1. Thêm mới dữ liệu: db.Categories.Add(category); 2. Xóa dữ liệu: db.Categories.Remove(category); 3. Sửa dữ liệu: db.Entry(category).State = EntityState.Modified; Các thao tác trên chỉ thay đổi trên bộ nhớ Entity gọi db.SaveChanges() để lưu xuống CSDL
Q&A