Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.81 MB, 76 trang )
Tích vào ơ MVC
Chọn OK
3.
Tạo Model
Bây giờ chúng ta sẽ tạo ra các Model đơn giản bằng các class.
Chúng ta sẽ tạo các class Model trong folder Models
Tạo 2 Model Artist và Song
public class Artist
{
public int ArtistId { get; set; }
public string Name { get; set; }
public virtual List
}
public class Song
{
public int SongId { get; set; }
public string Title { get; set; }
53
public int ArtistId { get; set; }
public virtual Artist Artist { get; set; }
}
Trong 2 model trên có sử dụng 2 thuộc tính navigation virtual (Artist.Songs và Song.Artist). Cho
phép tính năng Lazy Loading của Entity Framework. Lazy Loading có nghĩa là nội dung của
thuộc tính sẽ tự động load từ cơ sở dữ liệu khi ta truy cập chúng.
4.
Tạo Context
Chúng ta phải định nghĩa 1 bối cảnh, thể hiện 1 phiên làm việc với database, cho phép thực thi truy vấn
và lưu trữ dữ liệu. Chúng ta xây dựng 1 bối cảnh kế thừa từ System.Data.Entity.DbContext và biểu diễn
dạng DbSet cho mỗi lớp trong mơ hình.
Để dùng các dạng của Entity Framework, cần cài đặt gói EntityFramework NuGet. Để cài đặt, chọn Tools
-> Library Package Manage -> Manage NuGet Packages for Solution…, chọn nuget.org, chọn gói
EntityFramework và nhấn Install để cài. Sau đó, thêm using System.Data.Entity;
Project –> Manage NuGet Packages… Nếu bạn không có Manage NuGet Packages… bạn có
thể cài bản mới nhất tại đây.
Chọn tab Browse
Chọn EntityFramework package
Nhấn Install
Chúng ta tạo lớp MusicContext kế thừa từ lớp DbContext, và thêm dòng lện
Using System.Data.Entity;
Lớp MusicContext:
public class MusicContext : DbContext
{
public DbSet
public DbSet
}
5.
Đọc và ghi dữ liệu
Tạo HomeController trong thư mục Controlers sử dụng MusicContext để truy vấn dữ liệu
public class HomeController : Controller
{
MusicContext musicDb = new MusicContext();
// GET: Home
public ActionResult Index()
{
musicDb.Artists.Add(new Artist() {ArtistId = 1, Name = "Adele" });
musicDb.Artists.Add(new Artist() { ArtistId = 2, Name = "Sam Smith" });
musicDb.Songs.Add(new Song() { SongId = 1, Title = "Hello", ArtistId = 1 });
54
musicDb.Songs.Add(new Song() { SongId = 2, Title = "Stay With Me", ArtistId = 2 });
musicDb.SaveChanges();
var albums = musicDb.Songs
.Include("Artist");
return View(albums);
}
}
Khi bạn sử dụng Lớp MusicContext lần đầu tiền Visual Studio sẽ tạo Cơ sỡ dữ liệu cho bạn.
//?? Generate như thế nào
Theo quy ước thì DbContext sẽ tạo ra một CSDL
Dữ liệu của bạn sẽ nằm ở local SQL Express instance nếu có (sẽ được cài đặt mặt định bởi
Visual Studio 2010).
Nếu khơng có SQL Express thì Code First will tạo CSDL trên LocalDb (được cài đặt mặt định bởi
Visual Studio 2012)
Tên CSDL sẽ được đặt theo tên đầy đủ của lớp Context trong trường hợp này
là CodeFirstNewDatabaseDemo.MusicContext
Có 1 số cách kết nối với database, bạn thử 1 trong các cách sau. Trong Server
Explorer ở Visual Studio, chọn View -> Server Explorer. Chuột phải chọn Data
Connections và chọn Add Connection… Tiếp theo
gõ (localdb)/Username hoặc .\SQLEXPRESS vào phần Server Name, sau đó
chọn database của bạn.
55
DbContext làm việc với các lớp trong mơ hình bằng cách nhìn các thuộc tính
DbSet mà chúng ta đã định nghĩa. Sau đó dùng tập mặc định các quy ước Code
First để xác định bảng và tên các cột, xác định kiểu dữ liệu, tìm các khóa chính,
…
56
6.
Giải quyết khi Model thay đổi
Cái hay nhất của Code First là cho phép thay đổi mơ hình code, từ đó thay đổi
ln database tùy ý. Để làm được việc này, chúng ta sẽ áp dụng 1 tính năng gọi
là Code First Migrations (dịch nơm na là tích hợp Code First), hay gọi là
Migrations cho ngắn gọn.
Migrations cho phép thiết lập 1 tập các bước mơ hình cách nâng cấp/bỏ bớt lược
đồ database. Ở mỗi bước, được xem là 1 migration, chứa đoạn mã mô tả các
thay đổi được áp dụng.
A new Migrations folder has been added to our project that contains two items:
Configuration.cs – This file contains the settings that Migrations will use for migrating
BloggingContext. We don’t need to change anything for this walkthrough, but here is where you
can specify seed data, register providers for other databases, changes the namespace that
migrations are generated in etc.
already been applied to the database to take it from being an empty database to one that
includes the Blogs and Posts tables. Although we let Code First automatically create these tables
for us, now that we have opted in to Migrations they have been converted into a Migration. Code
First has also recorded in our local database that this Migration has already been applied. The
timestamp on the filename is used for ordering purposes.
Now let’s make a change to our model, add a Url property to the Blog class:
Bước đầu tiên là kích hoạt chế độ Code First Migration cho BloggingContext
bằng cách vào Toosl -> Library Package Manager -> Package Manager Console,
gõ dòng lệnh Enable-Migrations và nhấn Enter như hình.
57
Sau đó, bạn có thể thấy thư mục Migrations như trong hình sau.
Tiếp theo chúng ta thử thay đổi mơ hình, thêm thuộc tính Country vào lớp Artist
như sau:
1
public class Artist
2
{
3
public int ArtistId { get; set; }
4
public string Name { get; set; }
5
public string Country { get; set; } // thêm thuộc tính mới
6
public virtual List
7
}
8
Sau đó chạy dòng lệnh Add-Migration AddCountry với AddCountry là tham số
tên, thật ra bạn đặt bất cứ tên gì cũng được. Khi chạy dòng lệnh trên, Migrations
sẽ kiểm tra lần tích hợp cuối của bạn và xây dựng 1 mơ hình mới với bất cứ thay
đổi được tìm thấy, sau đó sẽ thay đổi database cho phù hợp với mơ hình này.
Thậm chí, bạn có thể vào lớp AddCountry vừa tạo để chỉnh tay thêm/xóa các
trường cần thiết.
1
2
3
4
5
6
7
8
9
10
11
12
namespace CodeFirstNewDatabaseDemo.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class AddCountry : DbMigration
{
public override void Up()
{
AddColumn("dbo.Artists", "Country", c => c.String());
}
58