Buổi 7
Mô hình CSDL Entity Framework
code first
Trần Minh Thái
1
Mục tiêu
1. Các thao tác cấu hình cho ứng
dụng dùng mô hình CSDL Entity
FrameWork code first
2. Tạo CSDL
3. Cài đặt SqlServer Compact
4. Một số thao tác cơ bản trên
CSDL
2
2
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
5
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)
6
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”
7
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”
8
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
9
C1. Cấu hình EF và SQL Compact
• System.ComponentModel.DataAnnotations.dll
“C:\Program Files\Reference
Assemblies\Microsoft\Framework\.NETFramework\v4.5.2”
10
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
11
Cấu hình
EF và
SQL
Compact
Sau khi add
reference thành
công
12
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; }
}
}
14
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>();
}
15
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
16
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
new Category { ID = 2, Name = "Category
new Category { ID = 3, Name = "Category
new Category { ID = 4, Name = "Category
new Category { ID = 5, Name = "Category
}.ForEach(m => context.Categories.Add(m));
}
}
}
1"
2"
3"
4"
5"
},
},
},
},
}
17
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());
}
}
}
18
Cài đặt Sql Server Compact cho EF
19
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
20
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
21
Q&A
22 22