1. Trang chủ >
  2. Luận Văn - Báo Cáo >
  3. Kỹ thuật >

Ưu điểm và nhược điểm

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 )


Rất phổ biến (vì các lập trình viên thường

khơng thích thiết kế DB, nhưng thích thiết kế

class)

Kiểm sốt hồn tồn code model, thêm xóa

sửa thuộc tính vơ cùng dễ dàng

Ưu điểm

Không phải nặng đầu suy nghĩ về DB. Đối với

cách tiếp cận này, DB chỉ là cái “cục” data, lôi

ra xài thơi



Ít phổ biến hơn

DB có thể được develop riêng

Dùng được DB có sẵn

Entity Framework sẽ tạo ra các Entity class cho bạn



Có thể version control Database



Khơng thể thay đổi code đã được Generate (nó sẽ mất

trong lần chỉnh sửa cấu trúc DB tiếp theo)

Các thay đổi cấu trúc trực tiếp trên DB sẽ mất

Nhược

điểm



Khó kiểm sốt những column sẽ tạo trên Db



Bạn phải nhức đầu suy nghĩ khi muốn biểu diễn các

kiểu quan hệ cha con của class

Mỗi lần thay đổi cấu trúc DB, bạn sẽ phải update lại

EDMX và tạo lại các class Model để phản ánh sự thay

đổi đó



Hơi khó khi kết hợp với Db có sẵn



12.



Khó khăn khi muốn thêm các DataAttribute và

DisplayAttribute cho các class model



Tương lai nào cho ASP.NET Core?



ADO.NET Entity Framework (EF) được Microsoft đưa ra từ phiên bản .NET 3.5

tích hợp với Visual Studio 2008. Trọng tâm của EF là Entity Data Model, một mơ

hình mẫu cho application domain của bạn ánh xạ ngược trở lại vào đồ hình

(schema) của CSDL của bạn. Mơ hình mẫu này mơ tả các lớp chính (core class)

trong ứng dụng của bạn. EF sử dụng mô hình mẫu này trong khi truy vấn từ

CSDL, tạo các đối tượng từ dữ liệu và sau đó đưa các thay đổi ngược trở lại vào

CSDL.

Việc mơ hình hóa (modeling) với Entity Framework trước khi có Code First

Phiên bản đầu tiên của EF cho phép lập trình viên tạo mơ hình mẫu bằng cách

reverse engineering một CSDL đang có vào một tập tin XML. Tập tin XML này sử

dụng phần mở rộng EDMX và bạn có thể sử dụng designer để xem và tinh chỉnh

mơ hình sao cho thích hợp nhất với domain của bạn. Visual Studio 2010 và .NET

4 mang đến phiên bản thứ 2 của EF, được đặt tên là Entity Framewoork 4 (EF4),

để phù hợp với phiên bản .NET. Về mặt mơ hình hóa, một tính năng mới gọi là

Model First được đưa vào. Tại đây, bạn có thể thiết kế mơ hình mẫu của bạn

trong visual designer và sau đó tạo CSDL dựa trên mơ hình này.

Model First cho phép lập trình viên làm việc trên các project mới mà không phải

phụ thuộc vào dữ liệu để tận dụng khả năng của EF. Lập trình viên có thể bắt

63



đầu với việc tập trung vào application domain bằng việc thiết kế mơ hình mẫu và

để CSDL tự động tạo theo như quy trình.

Dù cho việc thiết kế EDMX theo hướng database-first hay model-first, bước kế

tiếp để tạo domain là để cho việc tạo code tự động tạo các lớp dựa trên các thực

thể và các mối liên hệ của chúng mà nó tìm thấy trong model. Từ đây, lập trình

viên có các strongly typed class đại diện cho các domain object và có thể tiếp tục

việc phát triển ứng dụng xoay quanh các class này.

Một thay đổi lớn khác trong phiên bản EF4 đó là trong .NET 3.5, cách duy nhất

EF có thể quản lý các đối tượng trong vùng nhớ (in-memory object) là yêu cầu

các lớp phải kế thừa từ EntityObject của EF. EntityObject theo dõi các thay đổi

và có khả năng đẩy ngược chúng lại CSDL. Theo tính năng này, .NET 4 đã giới

thiệu POCO (Plain Old CLR Object) hỗ trợ EF theo dõi các thay đổi cho các lớp

đơn giản hơn mà không cần EntityObject phải được thực thi.

Hello Code First

Được xây dựng dựa trên các thành phần được giới thiệu trong EF4, Code First

cho phép lập trình viên định nghĩa domain model với code thay vì phải sử dụng

một tập tin EDMX. Mặc dù Model First và Database First sử dụng code

generation để cung cấp các class cho bạn làm việc, nhiều lập trình viên khơng

muốn làm việc với designer hoặc các class được tạo từ chúng.

Trong Code First, bạn bắt đầu bằng việc định nghĩa domain model của bạn bằng

việc sử dụng các POCO class không phụ thuộc vào EF. Code First có thể bao

hàm nhiều thơng tin về model từ các class của bạn. Bạn có thể cung cấp cấu

hình bổ sung để mơ tả model hoặc override những gì mà Code First cung cấp.

Phần cấu hình này cũng được thực hiện trong code chứ không phải trong tập tin

XML hay designer.

EF4 cũng hỗ trợ các POCO class khi làm việc với designer. EF cung cấp một

POCO template cho phép tạo ra các POCO class. Những class này sẽ được cập

nhật tự động khi bạn thay đổi trên designer. Bạn cũng có thể sử dụng các POCO

class của mình, nhưng một khi bạn đã chọn cách này thì bạn phải chấp nhận

việc đồng bộ hóa giữa các class của bạn và tập tin EDMX. Điều này có nghĩa là

bất kì việc thay đổi nào phải được thực hiện ở 2 nơi: một là trên designer, một ở

trong các class của bạn. Một trong những thuận lợi lớn của Code First đó là các

class của bạn trở thành model, điều này có nghĩa rằng bất kì thay đổi nào cho

model chỉ cần được thực hiện ở một nơi duy nhất – POCO class của bạn.

Code First, Model First và Database First cũng chỉ là các cách để xây dựng một

Entity Data Model để có thể được sử dụng với EF để thực hiện việc truy cập dữ

liệu.

64



Microsoft đưa ra các tùy chọn Database First, Model First và Code First như là

các workflow là vì thực sự mỗi tùy chọn đều bao gồm một tập các bước dù cho

bạn tự thực hiện hay do tự động.



Khi phát triển 1 ứng dụng phần mềm nói chung, chắc hẳn bạn đã quen với việc

khảo sát hiện trang, phân tích yêu cầu đầu vào, vẽ sơ đồ Use Case, sơ đồ lớp,

… rồi sau đó là thiết kế cơ sở dữ liệu trước khi bắt tay vào lập trình xây dựng

chương trình. Tuy nhiên, đây là cách tiếp cận truyền thống và trong 1 số trường

hợp có thể khơng phù hợp.

Một cách khác, có thể chúng ta thường hay làm mà ít để ý đó là thiết kế mã

nguồn chương trình trước, sau đó gieo mới cơ sở dữ liệu sau. Nội dung bài

này sẽ trình bày về vấn đề này với việc sử dụng Entity Framework.

.



65



Vậy là việc tạo CSDL ban đầu đã xong, bây giờ bạn hãy thêm các record mẫu cho các bảng này.

Sau đó chúng ta sẽ kiểm tra xem rằng Bounded Context có truy xuất đến cùng database hay khơng

bằng cách viết hàm sau vào tập tin Program.cs:



1







2



public static bool CanRetrieveInfoFromBlogContext()



3



{



4



var context = new BlogContext();



5



Debug.WriteLine(context.Database.Connection.ConnectionString);



6



return context.Blogs.Any();



7



}



8







Sau đó gọi hàm này trong hàm Main và xem kết quả



66



Oh oh, lỗi rồi. Lý do là trong mã nguồn của BaseContext class, chúng ta khai báo khơng đúng CSDL

cần truy xuất, đó là “BoundedContextDemo”, trong khi đó CSDL chúng ta đang truy xuất hiện tại là

“DemoDatabaseInitialization.DemoDatabaseModel” mặc định do Code First tạo ra. Việc đơn giản ở

đây là chúng ta chỉ việc khai báo lại tên CSDL trong BaseContext class và build lại solution.



1







2



protected BaseContext() : base("DemoDatabaseInitialization.DemoDatabaseModel") { }



3







Kết quả là



Bây giờ chúng ta hãy thử kiểm tra xem Bounded Context có lấy đượct thông tin từ CSDL ra hay

không bằng cách viết thêm hàm sau:



1







2



public static Post GetTheFirstRecordFromPostTable()



3



{



4



Post post = new Post();

var context = new BlogContext();



67



5

post = context.Posts.FirstOrDefault();



6



return post;



7



}



8







9

Sau đó gọi hàm này trong hàm Main, build solution và xem kết quả



1



Console.WriteLine(GetTheFirstRecordFromPostTable().Title;



Hurray, đã lấy được. Như vậy, đến đây bạn có thể hiểu được phần nào về Bounded Context là gì,

mục đích sử dụng của nó trong Domain Driven Design là như thế nào. Chúc các bạn tạo ra được

những ứng dụng tốt với EF Code First.



D.

Tạo EDM theo hướng Code First (Step by Step) 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.

1

2

3

4

5

6

7

8

9



public partial class tbLop

{

[Key]

[DatabaseGenerated(DatabaseGeneratedOption.None)]

public int IdLop { get; set; }

[StringLength(50)]

public string Lop { get; set; }

}

68



10

11

12

13

14

15

16

17

18

19

20

21

22



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; }

}



Danh sách các annotation mà EF hỗ trợ bao gồm:



































KeyAttribute

StringLengthAttribute

MaxLengthAttribute

ConcurrencyCheckAttribute

RequiredAttribute

TimestampAttribute

ComplexTypeAttribute

ColumnAttribute

Placed on a property to specify the column name, ordinal & data type

TableAttribute

Placed on a class to specify the table name and schema

InversePropertyAttribute

Placed on a navigation property to specify the property that represents the

other end of a relationship

ForeignKeyAttribute

Placed on a navigation property to specify the property that represents the

foreign key of the relationship

DatabaseGeneratedAttribute

Placed on a property to specify how the database generates a value for

the property (Identity, Computed or None)

NotMappedAttribute

Placed on a property or class to exclude it from the database



69



Xem Thêm
Tải bản đầy đủ (.docx) (76 trang)

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×