1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tìm hiểu entity framework

76 662 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 76
Dung lượng 1,88 MB

Nội dung

Tìm hiểu entity framework

Trang 1

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

KHOA CÔNG NGHỆ PHẦN MỀM

-❧❧❧❧ -CÔNG NGHỆ NET

ĐỀ TÀI: TÌM HIỂU ENTITY FRAMEWORK

Giảng viên hướng dẫn: ThS Phạm Thi Vương Sinh viên thực hiện:

HỒ CHÍ MINH – 01/2018

Trang 2

Nhận Xét Của Giảng Viên

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

Trang 3

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

……….

………

Trang 4

I Giới thiệu về Entity Framework:

‘’Entity Framework is Microsoft’s recommended data access technology for new applications

EF là công nghệ truy vấn dữ liệu cho các ứng dụng mới được đề nghị sử dụng bởi Microsoft.’’

Entity Framework là các công nghệ hỗ trợ cho việc phát triển các phầnmềm hướng đối tượng Entity Framework cho phép nhà pháp triển làm việc với

dữ liệu dưới dạng đối tượng cụ thể và các thuộc tình, giống như khách hàng vàđịa chỉ khách hàng, mà không cần quan tâm đến các bảng và cột bên dưới kholưu trữ dữ liệu Với Entity Framework nhà phát triển có thể làm việc ở cấp trừutượng cao hơn khi xử lý dữ liệu, và có thể tạo và duy trì phần mềm hướng đốitượng ít mã hơn so với phần mềm truyền thống

A Tổng quan

Microsoft ADO.NET Entity Framework là một Object / Relational Mapping (ORM) làm giảm đi sự không tương hỗ giữa phương pháp phát triển hướng đối tượng của nhà phát triển NET và thế giới của cơ sở dữ liệu quan hệ Cho phép nhà phát triển chủ yếu tương tác với mô hình khái niệm của ứng dụng, sử dụng các kỹ thuật hướng đối tượng quen thuộc.Cho phép các nhà phát triển dể dàng làm việc với dữ liệu quan hệ như là các đối tượng domain-specific, loại bỏ đi sự khó khăn trong việc truy cập dữ liệu trước đây Bằng cách sử dụng Entity

Framework, truy vấn LINQ, thì việc lấy và thao tác dữ liệu như các đối tượng trở nên mạnh mẽ hơn Entity Framework ORM cung cấp các dịch vụ như change tracking, idenity resolution, lazay loading, và truy vấn dữ liệu tập trung vào

business logic của ứng dụng

O/RM

Trang 5

ORM là kỹ thuật chuyển đổi dữ liệu

giữa các hệ thống khác (không phải

là mô hình hướng đối tượng) sang

các đối tượng trong ngôn ngữ lập

trình hướng đối tượng Trong

trường hợp này chúng ta chuyển dữ

liệu từ các dòng dữ liệu trong CSDL

quan hệ sang đối tượng Tìm hiểu

thêm về O/RM tại đây

 O/RM giúp tách riêng database và domain class để dễ phát triển và maintainHiểu đơn giản hơn, ORM là cộng cụ để generate class từ database:

Có nhiều ORM frameworks dành cho net trên thị trường như là: DataObjects.Net, NHibernate, OpenAccess, SubSonic

Lưu ý: Entity Framework là mã nguồn mở ORM framework của Microsoft

C Tại sao nên sử dụng LinQ hay Entity Framework

Với SQLExpress để truy vấn dữ liệu ta phải dùng đến các câu lệnh Query khá phức tạp Hơn nữa để sử dụng trong ứng dụng C# lại thêm 1 tầngphức tạp nữa với các câu lệnh: dùng ConnectionString khởi tạo kết nối tớiDataBase, tự khai báo các biến để chạy 1 lệnh - command, rồi còn phải tính toán

Trang 6

-đầu ra của câu lệnh Thật là quá phức tạp nếu như ta có 1 chương trình

"khủng"

Vậy làm sao để giải quyết vấn đề này?

Lợi ích lớn nhất của EF là giúp lập trình viên giảm thiểu việc lập trình mãnguồn cần thiết để truy cập và tương tác với cơ sở dữ liệu

EF được Microsoft hỗ trợ phát triển lâu dài và bền vững, vì vậy EF là 1framework mạnh nhất hiện nay để phát triển ứng dụng Web với sự hỗ trợ đôngđảo của các nhà phát triển Web

II Hướng dẫn cài đặt Entity Framework

EF bao gồm EF Tools cho Visual Studio và EF Runtime

A EF Tools dành cho Visual Studio

EF6 Tools đã được thêm vào từ phiên bản VS 2013 Nếu bạn đang sử dụngphiên bản VS 2012 thì có thể cài đặt tại đây (Bạn phải đảm bảo Microsoft WebDeveloper Tools hoặc Microsoft SQL Server Data Tools đã được cài đặt trước khicài đặt EF Tools)

B EF Runtime

 Phiên bản mới nhất của Entity Framework đã có trên NuGet

 Cài đặt EF Nuget Package

 Bạn có thể cài EF package bằng cách click phải vào folder References vàchọn Manage NuGet Packages …

Trang 7

 Để cài Entity Framework, bạn nhấn chuột phải vào thư mục References(hoặc bin) trong dự án Web và chọn Manage NuGet Packages.

Sau đó bạn tìm và cài đặt gói Entity Framework vào dự án Web

Cài đặt gói EF bằng dòng lệnh (Package Manger Console)

Bạn chọn thư mục cần cài đặt EF (bin hoặc References), sau đó chọn menuTools -> Library Package Manager -> Package Manager Console như tronghình

Trang 8

Ở phần dòng lệnh dưới đáy bộ công cụ, bạn gõ: Install-PackageEntityFramework

Cài đặt bản EF mới nhất

Để cài đặt phiên bản EF mới nhất, bạn có thể chọn Include Prerelease trongcửa sổ Manage NuGet Package

Trang 9

III Kiến trúc của Entity Framework

Có 2 tầng chính trong ứng dụng Entity Framework:

để độc lập với mô hình quan hệ các bảng trong database

- Mô hình ánh xạ Mapping – Mapping specification language (MSL): định nghĩacác ánh xạ giữa lớp conceptual và logical, nội dung này được lưu trong tậptin msl Mô hình ánh xạ gồm thông tin về cách mô hình khái niệm được ánh

Trang 10

A Application

Application (ứng dụng) là tầng chứa giao diện trang Web (HTML, CSS,

Javascript, hình ảnh, …) và các đoạn mã nguồn (C#, VB) để tương tác dữ liệu với các tầng khác trong mô hình thông qua Object Services

B Object Services

Object Services (tạm dịch là các dịch vụ đối tượng) là tầng chứa quá

trình tương tác giữa ứng dụng và database, hay nói cách khác nó là nơi chủ yếu

để truy cập dữ liệu từ database và trả ngược kết quả về giao diện ObjectServices cung cấp các tiện ích để truy vết các thay đổi và quản lý nhận dạng,đồng thời là các quan hệ và thay đổi ở database

Đây là các class tự động sinh ra tương ứng với mô hình dữ liệu Cácclass này bao gồm:

năng quản lý các kết nối, định nghĩa mô hình dữ liệu với metadata và thaotác với database Lớp này cũng có thể thêm vào các phương thức đạidiện cho các stored procedure trong database

▪ ObjectSet<TEntity> là một một tập hợp các entity Mỗi đối tượngnày tương ứng với một table Có thể lấy được các đối tượng này thôngqua các property tương ứng của ObjectContext

▪ EntityObject, ComplexObject là các lớp tương ứng cho một dòng

dữ liệu của table trong database Khác biệt chính giữa hai loại này làComplexObject không chứa primary key

▪ EntityCollection<TEntity> và EntityReference<TEntity>: là các đốitượng thể hiện mối quan hệ (relationship) giữa hai entity class Mỗi đốitượng này có thể được truy xuất thông qua các property của entity class

Ta có bảng ánh xạ tương đương sau giữa các đối tượng trong database vàEF:

Trang 11

sau đó sử dụng LINQ to Entities để lấy ra tất cả các sản phẩm (trong bảngProductvà in ra màn:

ObjectContext context = new ObjectContext ("name=ProductDBEntities");

ObjectSet<Product> products = context.CreateObjectSet<Product>();

var query = from p in products

C Entity Data Model

Entity Data Model (EDM) là mô hình dữ liệu được mô tả thông qua các ngôn ngữtheo chuẩn XML EDM được chia làm 3 lớp là: Conceptual, Mapping và Logical Mỗi lớpnày được định nghĩa bởi ngôn ngữ riêng theo định dạng XML.( EDM khác với

EntityClient Data Provider ở chỗ EDM sử dụng LINQ là ngôn ngữ truy vấn tương tác với database.)

Một ứng dụng Entity Framework (EF) có thể sử dụng 1 trong 3 cách tiếp cận: Database First, Model First và Code First

Database First:

Trang 12

Đây là cách thông thường và được hỗ trợ từ phiên bản EF 1 trong Visual Studio2008.EF sẽ tự động tạo ra data model và các class (object layer) cho bạn từ database

có sẵn thông qua công cụ Entity Data Model Wizard Bạn có thể thay đổi data model và cập nhật lại vào database Đây là cách tiếp cận phổ biến vì cách thực hiện đơn giản, nhanh chóng

Model First:

Hướng tiếp cận này được bổ sung từ phiên bản EF 4 trong Visual 2010 Bạn có thể tạo một data model rỗng bằng công cụ Entity Data Model Designer, khi đó object layer cũng tự động được sinh ra Sau khi đã hoàn thành việc thiết kế, bạn có thể sử dụng chức năng Generate Database from Model để tạo ra các mã DDL (data definition language) dựa trên mã SSDL (Store Schema Definition Language) Các mã DDL này sẽđược thực thi và lưu thành tập tin sql

Code First:

Với phiên bản EF 4 bạn cần phải cài thêm thư viện EF Feature CTP

(Community Technology Preview) để sử dụng Tuy nhiên tính năng này đã được tích hợp vào trong phiên bản EF 4.1 và với phiên bản VS 2010 hiện tại thì bạn cần phải download để cài đặt thủ công Hướng tiếp cận này bỏ qua phần Model (.edmx), bạn có thể thiết kế các class tương ứng với các table của database mà bạn cần làm việc hoặc muốn tạo ra Với hướng tiếp cận này, bạn sẽ sử dụng class DbContext thay vì

ObjectContext để thao tác với database Việc sử dụng Code First đòi hỏi bạn phải thực hiện các công việc một cách thủ công nhưng bù lại nó linh hoạt và được sử dụng rất phổ biến

L2E (LINQ to Entities): là 1 ngôn ngữ truy vấn được dùng để viết các truy vấn

trái với mô hình đối tượng L2E trả về các thực thể, được định nghĩa bởi mô hình kháiniệm Chúng ta có thể dùng LINQ trong ngôn ngữ này

Trang 13

Tham khảo thêm: CSDL, SSDL, and MSL Specifications

Các nội dung của ba tập tin csdl, msl và ssdl được lưu trữ trong cùng tập

tin .edmx trong Visual Studio Tập tin này có thể được tạo ra tự động từ

database và công cụ Entity Framework Model Wizard của Visual Studio Trongquá trình biên dịch, các tập tin csdl, msl và ssdl sẽ được tạo ra dựa vào tậptin edmx này

Note : Khi mở tập tin edmx này, VS tự động hiển thị giao diện trực quan của nó

bằng công cụ mặc định là ADO.NET Entity Data Model Designer Để xem nội

dung của tập tin này, bạn nhấn chuột phải, nhấn Open with… và chọn mục XML

Editor hoặc một trình xem dưới dạng văn bản bất kì

D EntityClient Data Provider

Đây là tầng cung cấp các kết nối, diễn dịch các truy vấn thực thể thành truy vấn nguồn dữ liệu (chuyển L2E – LINQ to Entity hay các truy vấn thực thể SQL thành truy vấn SQL), trả về data reader để EF dùng chuyển dữ liệu thực thểthành các đối tượng Phần này kết nối ADO.NET Data Providers để gửi hoặc lấy

dữ liệu từ database Tầng này hoàn toàn khác với EDM (Entity Data Model) khi thực thi các truy vấn tương tự như cách thực hiện ở ADO.NET Provider

EntityClient Data Provider sử dụng ESQL (Entity SQL), một ngôn ngữ truy vấn độc lập dạng văn bản, tương tự như SQL

EntityClient là một data provider mới của ADO.NET dùng để truy xuất đếndatabase Được xây dựng bên trên các ADO.NET data provider cơ bản,EntityClient không truy xuất trực tiếp dữ liệu mà thông qua các data providerkhác dựa vào các thông tin dữ liệu từ Entity Data Model

EntityClient cũng bao gồm các lớp giống như các ADO.NET data providerkhác và tên lớp được đặt với tiền tố Entity Ví dụ bạn có thể tạo kết nốibằng EntityConnection, tạo các câu truy vấn bằng EntityCommand và đọc kếtquả bằng EntityDataReader

Trang 14

Một điểm khác biệt với các data provider khác là EntityClient sử dụng Entity SQL

để truy vấn dữ liệu Các lệnh Entity SQL sẽ được chuyển thành một cấu trúclệnh dạng cây (command tree) và chuyển xuống cho các data provider khác

Ví dụ sau sử dụng EntityClient để tạo kết nối, tạo đối tượngEntityCommand và sử dụng tham số để lấy các sản phẩm có ID là 1:

cmd.Parameters.AddWithValue("catId", id);

EntityDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess); while (reader.Read())

{

var catId = reader["id"];

var name = reader["ProductName"];

Console.WriteLine("{0,-3}{1}", catId, name);

}

reader.Close();

}

E ADO.NET Data Providers

Đây là tầng thấp nhấp để dịch các truy vấn L2E (LINQ to Entity) thông quacây lệnh thành các câu lệnh SQL và thực thi các câu lệnh trong hệ thống DBMS (database management system – hệ quản lý dữ liệu) nào đó Tầng này kết với database sử dụng ADO.NET

IV Vị trí của Entity Framework trong mô hình lập trình và phát

triển Web

Chắc hẳn, bạn đã biết về mô hình Web 3 tầng (n tầng) khi đọcsách, giáo trình, bài giảng về nội dung lập trình Web Tuy nhiên, vấn đềbạn cần phải hiểu rõ là: việc định rõ số lượng các tầng và các mối liên hệgiữa các tầng trong mô hình phát triển Web cũng rất đa dạng, tùy theocách hiểu các lập trình viên và dự án Web Do đó, việc hiểu EntityFramework nằm ở đâu trong mô hình Web 3 tầng cũng không hoàn toàn

Trang 15

dễ dàng Trong phần này, tôi có tham khảo từ Stephen M Redd nhằm giúpcác bạn hiểu rõ bản chất vấn đề hơn.

Đầu tiên, chúng ta có vị trí của EF trong mô hình dự án Web ASP.NETMVC

Trong mô hình trên, chúng ta thấy vị trí của EF nằm trọn trong tầngData Access Layer, tức là EF đóng vai trò là nơi trung gian để tương tác

dữ liệu từ database với các tầng cao hơn, chẳng hạn như Business Layer.Hay nói cách khác, EF đóng vai trò như là phiên bản mới của ADO.NET.Tuy nhiên vị trí của EF trong mô hình này chỉ có trên lý thuyết

Trang 16

Thật sự, khi bắt tay xây dựng nhiều dự án Web, vị trí thường thấy

EF ở các dự án website trên thực tế như mô hình sau

Trong hình trên, EF dường như có vị trí rất tự do, xuất hiện ở cả 3tầng Data Access Layer, Business Layer, và cả Presentation Layer Cácbạn có thể hình dung EF như là 1 thư viện, hễ tầng nào cần thì chỉ cần gọiđến Mô hình này xuất phát có thể là sự cẩu thả của lập trình viên khikhông thích tuân theo tiêu chuẩn quan hệ giữa các tầng hoặc cách giảithích khác là sự lỏng lẻo giúp cho việc lập trình thuận tiện hơn Trong vài

mô hình người ta gom tầng Data Access Layer và Business Layer chỉ làmtầng Data Model, và vị trí EF cũng bao hàm tầng Data Model và

Trang 17

Presentation Layer như hình.

Đến đây, bạn có thể hiểu 1 cách chung nhất EF có vị trí trung gian,đóng vai trò kết nối giữa cơ sở dữ liệu và các thành phần khác của 1 dự

án Web khi cần đến Ngoài ra, có nhiều cách hiểu về vị trí của EF ở đâutrong mô hình Web, bạn sẽ dần khám phá để đưa ra cách hiểu và địnhnghĩa riêng trong quá trình thiết kế và xây dựng dự án Web ASP.NET

V Các phiên bản của Entity framework

2 phiên bản đầu tiên của EF đi kèm với NET framework và được đặt tên phiên bản cùng với tên phiên bản NET tương ứng là 3.5 và 4 Sau 2 phiên

bản này EF đã cho ra các phiên bản độc lập

Các phiên bản của EF và tính năng của chúng

Trang 18

EF

4.0

Bản này đi kèm với NET Framework 4 và Visual Studio 2010 Các tính năng mới trong bảng này gồm: hỗ trợ POCO, lazy loading, testability improvements, customizable code generation và quy trìnhModel First Mặc dù là phiên bản thứ 2 nhưng lại được đặt là EF 4

để phù hợp với phiên bản NET đi chung Sau bản này thì Microsoft

đã bắt đầu cung cấp EF sẵn có trên NuGet và không còn gắn liền

với phiên bản NET Framework

Sửa bug phiên bản trước và giới thiệu các component để giúp cho

thời gian thiết kế để làm việc với Code Frist model dễ dàng hơn.Các component này được sử dụng bởi Code First Migrations ( trong

EF 5

Bản release này được sử dụng trong VS2010 và VS 2012 để viết ứng dụng có sử dụng NET 4.0 và NET 4.5 Khi hướng đến NET 4.5 bản release có giới thiệu thêm một vài tính năng mới như hỗ trợ

Trang 19

enum, table-valued functions, spatial data types và cải thiệu nhiều

về performance

Nếu bạn cài đặt một model mới sử dụng EF Designer trong VS

2012, the EF5 NuGet package sẽ được cài vào project và tự động sinh code để sử dụng EF5 Khi tạo projects mới về ASP.NET trong

VS 2012 ( bao gồm cả project về MVC) cũng sẽ được cài đặt EF5 NuGet đi kèm mặt định

EF Designer trong VS2012 cũng hỗ trợ multiple-diagrams cho một model, thay đổi màu cho các khối trong bản thiết kế và import STD

EF 6

Bản release này được sử dụng trong VS 2013, VS 2012 và VS 2010( chỉ EF Runtime) để viết ứng đụng hướng đến NET 4.0 và NET 4.5

Tooling

The EF6 Tooling is included in Visual Studio 2013 and available for download for Visual Studio 2012 See the Get Entity

Frameworkpage for more information

The focus for the tooling in EF6 was to add support for the EF6 runtime and to enable shipping out-of-band between releases of Visual Studio

The tooling itself does not include any new features, but most of the new runtime features can be used with models created in the EF Designer

- Async Query and Save adds support for the task-based

asynchronous patterns that were introduced in NET 4.5

- Connection Resiliency enables automatic recovery from

transient connection failures

Trang 20

- Code-Based Configuration gives you the option of performing configuration – that was traditionally performed in a config file – in code

- Dependency Resolution introduces support for the Service Locator pattern and we've factored out some pieces of functionality that can be replaced with custom implementations

- Interception/SQL logging provides low-level building blocks for interception of EF operations with simple SQL logging built on top

- Testability improvements make it easier to create test doubles

for DbContext and DbSet when using a mocking

framework or writing your own test doubles

- DbContext can now be created with a DbConnection that is already opened which enables scenarios where it would be helpful

if the connection could be open when creating the context (such as sharing a connection between components where you can not guarantee the state of the connection)

- Improved Transaction Support provides support for a

transaction external to the framework as well as improved ways of creating a transaction within the Framework

- Enums, Spatial and Better Performance on NET 4.0 - By

moving the core components that used to be in the NET

Framework into the EF NuGet package we are now able to offer enum support, spatial data types and the performance

improvements from EF5 on NET 4.0

- Improved performance of Enumerable.Contains in LINQ

queries

- Improved warm up time (view generation), especially for large

models

- Pluggable Pluralization & Singularization Service

- Custom implementations of Equals or GetHashCode on entity

classes are now supported

- DbSet.AddRange/RemoveRange provides an optimized way to

add or remove multiple entities from a set

- DbChangeTracker.HasChanges provides an easy and efficient

way to see if there are any pending changes to be saved to the database

- SqlCeFunctions provides a SQL Compact equivalent to

the SqlFunctions

The following features apply to Code First only:

- Custom Code First Conventions allow write your own

Trang 21

conventions to help avoid repetitive configuration We provide a simple API for lightweight conventions as well as some more

complex building blocks to allow you to author more complicated conventions

- Code First Mapping to Insert/Update/Delete Stored

Procedures is now supported

- Idempotent migrations scripts allow you to generate a SQL script that can upgrade a database at any version up to the latest version

- Configurable Migrations History Table allows you to customize the definition of the migrations history table This is particularly useful for database providers that require the appropriate data typesetc to be specified for the Migrations History table to work

correctly

- Multiple Contexts per Database removes the previous limitation

of one Code First model per database when using Migrations or when Code First automatically created the database for you

- DbModelBuilder.HasDefaultSchema is a new Code First API thatallows the default database schema for a Code First model to be configured in one place Previously the Code First default schema was hard-coded to "dbo" and the only way to configure the schema

to which a table belonged was via the ToTable API

- DbModelBuilder.Configurations.AddFromAssembly

method allows you to easily add all configuration classes defined in

an assembly when you are using configuration classes with the Code First Fluent API

- Custom Migrations Operations enabled you to add additional operations to be used in your code-based migrations

- Default transaction isolation level is changed to

READ_COMMITTED_SNAPSHOT for databases created using

Code First, allowing for more scalability and fewer deadlocks

- Entity and complex types can now be nestedinside classes.

Trang 22

- Tooling consolidation provides a consistent way to create a new

EF model This feature extends the ADO.NET Entity Data Model wizard to support creating Code First models, including reverse engineering from an existing database These features were

previously available in Beta quality in the EF Power Tools

- Handling of transaction commit failures provides

the CommitFailureHandler which makes use of the newly introducedability to intercept transaction operations The

CommitFailureHandler allows automatic recovery from connection failures whilst committing a transaction

- IndexAttribute allows indexes to be specified by placing an

[Index] attribute on a property (or properties) in your Code First model Code First will then create a corresponding index in the database

- The public mapping API provides access to the information EF has on how properties and types are mapped to columns and tables

in the database In past releases this API was internal

- Ability to configure interceptors via the App/Web.config

file allows interceptors to be added without recompiling the

application

- System.Data.Entity.Infrastructure.Interception.DatabaseLogge

ris a new interceptor that makes it easy to log all database

operations to a file In combination with the previous feature, this allows you to easily switch on logging of database operations for a deployed application, without the need to recompile

- Migrations model change detection has been improved so that

scaffolded migrations are more accurate; performance of the

change detection process has also been enhanced

- Performance improvements including reduced database

operations during initialization, optimizations for null equality

comparison in LINQ queries, faster view generation (model

creation) in more scenarios, and more efficient materialization of tracked entities with multiple associations

The runtime is available on NuGet If you are using Code First then there is no need to install the tooling Follow the instructions onour Get It page for installing the latest version of Entity Framework runtime

The tooling for Visual Studio 2012 and Visual Studio 2013

is available on the Microsoft Download Center You only need to

Trang 23

install the tooling if you want to use Model First or Database First.

EF runtime đã có sẵn trên NUGET Làm theo hướng dẫn trên page

để cài đặt phiên bản mới nhất

EF Tooling VS2012 và VS2015 đã có sẵn trên Microsoft

Download Center Bạn chỉ cần cài đặt EF tooling nếu bạn muốn

tạo model sử dụng EF Designer hoặc sinh Code First model từ database đã tồn tại

- Các medthod của SqlFile và SqlResource về DbMigration cho

phép bạn chạy một SQL script được lưu trữ như là một tập tin hoặc nguồn nhúng

EF runtime đã có sẵn trên NUGET Làm theo hướng dẫn trên

page để cài đặt phiên bản mới nhất

EF Tooling VS2012 và VS2015 đã có sẵn trên Microsoft

Download Center Bạn chỉ cần cài đặt EF tooling nếu bạn muốn

tạo model sử dụng EF Designer hoặc sinh Code First model từ database đã tồn tại

Tìm hiểu các phiên bản trước Past Versions

VI Thiết kế Entity Data Model

Là thành phần trung gian giữa ứng dụng và database, Entity DataModel (EDM) giúp tạo liên kết và mô tả giữa nguồn dữ liệu vật lý và các

Trang 24

đối tượng bussiness (hay object layer) trong ứng dụng Dựa vào sự lựachọn thành phần nào sẽ được tạo ra trước, một ứng dụng EntityFramework (EF) có thể sử dụng 1 trong 3 cách tiếp cận: Database First,Model First và Code First.

Các sơ đồ dưới đây minh hoạt mối quan hệ và thứ tự tạo ra giữacác thành phần dữ liệu trong ứng dụng của Entity Framework Phần Modeltương ứng với tập tin edmx, Code tương ứng với tập tin cs (hoặc vb nếubạn dùng VB.NET)

Trang 25

Note: Bạn có thể nhận thấy rằng phần Model luôn được theo sau bởi

Code, điều này là nhờ công cụ Entity Data Model Designer trong Visual tựđộng tạo ra code tương ứng mỗi khi bạn thực hiện chỉnh sửa tập tin.edmx

- Code là mã lệnh tạo thành các lớp đối tượng dữ liệu chophé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,…)

- Database first:

Đây là cách thông thường và được hỗ trợ từ phiên bản EF 1 trongVisual Studio 2008.EF sẽ tự động tạo ra data model và các class (objectlayer) cho bạn từ database có sẵn thông qua công cụ Entity Data ModelWizard Bạn có thể thay đổi data model và cập nhật lại vào database Đây

là cách tiếp cận phổ biến vì cách thực hiện đơn giản, nhanh chóng

Trang 26

Phương pháp chỉ nên dùng khi ta đã có sẵn CSDL (không phải tạo.

Nên dùng khi ta bắt đầu thiết kế CSDL từ đầu (từ chưa có gì)

- Code first:

Với phiên bản EF 4 bạn cần phải cài thêm thư viện EF Feature CTP(Community Technology Preview) để sử dụng Tuy nhiên tính năng này đãđược tích hợp vào trong phiên bản EF 4.1 và với phiên bản VS 2010 hiệntại thì bạn cần phải download để cài đặt thủ công

Hướng tiếp cận này bỏ qua phần Model (.edmx), bạn có thể thiết kếcác class tương ứng với các table của database mà bạn cần làm việchoặc muốn tạo ra Với hướng tiếp cận này, bạn sẽ sử dụng classDbContext thay vì ObjectContext để thao tác với database Việc sử dụngCode First đòi hỏi bạn phải thực hiện các công việc một cách thủ côngnhưng bù lại nó linh hoạt và được sử dụng rất phổ biến

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 trunggian

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ùngtố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ệutrướ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

Trang 27

A Tạo EDM theo hướng Database First (Step by Step)

Phần này bạn sẽ được hướng dẫn cách tạo một Entity Data Model từngbước dựa vào công cụ Entity Data Model Designer

Bước 1: Tạo dự án mới với kiểu là Console Application.

Bước 2: Nhấn Add New Item (Ctrl+Shift+A) trên thanh công cụ và chọn

mục ADO.NET Entity Data Model trong hộp thoại hiện ra Đặt tên mục sắp thêm

vào là MusicModel phần mở rộng mặc định là edmx Nhấn Add.

Bước 3: Cửa sổ Entity Data Model Wizard hiện ra Bước này để xác định

bạn sẽ tạo model từ database có sẵn hoặc một model rỗng Bạn để lựa chọnmặc định là Generate from database và nhấn Next

Trang 28

Bước 4: Bước này bạn cần chọn database nào sẽ sử dụng Chuỗi kết nối

sẽ tự động được sinh trong phần Entity connection string Với tùy chọn Saveentity connection settings in App.Config, chuỗi kết nối này sẽ tự động được thêmvào tập tin App.Config, nhờ đó bạn không cần nhớ chuỗi kết nối mà chỉ cần nhớtên của kết nối là MusicStoreEntities

Trong trường hợp bạn chưa có sẵn kết nối với database nào, hãy nhấn nút NewConnection… Các kết nối mà bạn đã tạo sẽ hiện ra trong cửa sổ ServerExplorer Nhấn Next

Trang 29

Bước 5: Lựa chọn các table, view và stored procedure bạn muốn sử dụng.

Trong ví dụ này,sử dụng tất cả table là

Sau khi nhấn Finish, tập tin MusicModel.edmx sẽ được thêm vào Solution

Explorer Đây là tập tin có dạng xml và được mở với trình mặc định ADO.NETEntity Data Model Designer với giao diện trực quan như hình dưới Nếu muốncoi nội dung của tập tin này dưới dạng văn bản xml, bạn nhấn chuột phải vào

tập tin trong Solution Explorer > Open With… và chọn XML Editor Bạn có thể

coi các thông tin đầy đủ của model trong cửa sổ Model Browser và MappingDetails

Trang 30

Ngoài tập tin .edmx trên, một tập tin khác cũng được tự động tạo ra

là MusicStoreModel.Designer.cs Tập tin này chứa code C# được sinh ra cho

các class bạn sẽ sử dụng trực tiếp khi lập trình Các class này được gọi làObject Layer (là phần Object Services trong kiến trúc của Entity Framework).Khảo sát tập tin này, bạn sẽ thấy nó bao gồm các class là: MusicStoreEntities,Artist, và Song Trong đó, class MusicStoreEntities chính là class thừa kế từObjectContext mà bạn cần sử dụng để tạo kết nối và thao tác với database

1 Kiểm tra kết quả với LINQ to EntitiesViệc sử dụng LINQ to Entities rất đơn giản, tương tự như LINQ to SQL Bạn chỉcần làm việc với các class của object layer và property của chúng Ví dụ sau in

ra các sản phẩm có CategoryID là 1 trong bảng Products:

MusicStoreEntities db = new MusicStoreEntities ();

var query = from song in db.Songs

Trang 31

12 //

Output:

Hello

Some One Like You

//Thay đổi cấu trúc database

Bạn có thể thoải mái thay đổi cấu trúc các bảng, thuộc tính và dữ liệu trong database Mỗi lần thay đổi thay vì gieo lại mô hình bạn có thể dùng chức năng cập nhật mô hình trong dự án Chọn tập tin Models/Model.edmx, sau đó

mở tập tin này ra bạn thấy sơ đồ cấu trúc các bảng như sau

Chọn chuột lên vùng trống ở giao diện mô hình khi mở tập tin Model.edmx,

chọn chuột phải, chọn Update model from Database…

Trang 32

Sau đó, bạn chọn chế độ Refresh dành cho các bảng đã thêm vào mô hình hoặc Add dành cho các bảng mới Sau khi thao tác xong thì chọn Finish.

Trang 33

Vậy là xong về cách cập nhật mô hình Trong trường hợp có lỗi phát sinh mà bạn không thể sửa được, cách tốt nhất là xóa toàn bộ nội dung trong thư mụcModels và gieo lại mô hình.

Kết luận: Như vậy, bạn đã xong gieo xong mô hình (Model), để áp dụng mô

hình này vào Controller và hiển thị dữ liệu ra View mời bạn xem bài tiếp theo

B Tạo EDM theo hướng Model First (Step by Step)

Một cách tiếp cận khác khi phát triển ứng dụng phần mềm là xây dựng

mô hình trước, tạo database và gieo mã nguồn sau Phương pháp này giúp

cho chúng ta nắm và hình dung được mô hình phần mềm ở mức độ tổng quan,

từ đó mới phân chia phần mềm thành các phần con và triển khai xây dựng ứng

dụng Thông thường, các ứng dụng có quy mô lớn đến rất lớn sẽ ưu tiên sử

dụng phương pháp này Lý do là ở những ứng dụng này, cái người ta cần là có

sự quy hoạch chuẩn xác trên giấy (mô hình) vì quy mô quá lớn thay vì chỉ có tầmnhìn hạn hẹp làm tới đâu biết đến đó với những cách tiếp cận xây dựng phầnmềm khác Đôi khi có những module trùng lặp hoặc có sự kết nối/kế thừa giữacác module trong ứng dụng lớn, mô hình giúp chúng ta hình dung và giải quyếtđược các vấn đề đó

Ví dụ xây dựng 1 hệ thống thông tin quản lý điện tử của 1 trường đại họcbao gồm các chức năng như tin tức/thông báo, quản lý học phần/điểm, quản lýsinh viên, quản lý cán bộ, quản lý tiền lương cán bộ, quản lý thời khóa biểu,quản lý trung tâm thư viện, quản lý ký túc xá, quản lý nghiên cứu khoa học, quản

lý đối tác/cộng tác, quản lý tuyển sinh, … Ở hệ thống này, vì có quá nhiềumodule cho nên chúng ta không thể xây dựng theo kiểu Code First hay

Trang 34

Database First do không thể nắm và tối ưu hết được các công đoạn cần làm.

Chẳng hạn, chúng ta xây dựng bảng SinhVien dùng để lưu trữ sinh viên, nếu để

ý có thể thấy bảng SinhVien có thể dùng cho các module như: quản lý họcphần/điểm, quản lý sinh viên, quản lý thời khóa biểu, quản lý thư viện (mượn trảsách), … Nếu xây dựng phần mềm theo các phương pháp khác, đôi khi chúng takhó nhìn tổng quan vì vậy có thể tạo bảng SinhVien lặp lại ở nhiều module con

Model First cho phép bạn tạo 1 mô hình dùng Entity Framework Designer và sau đó gieo lược đồ cơ sở dữ liệu từ mô hình Mô hình được lưu trữ ở tập tin EDMX (.edmx) và có thể xem, chỉnh sửa ở Entity Framework

Designer Các lớp tương tác với ứng dụng được tự động gieo từ tập tin EDMX

Tương tự như Database First hay Code First, bạn cần có Visual Studio 2013 để

thực hiện ứng dụng Nếu bạn xài VS 2010 hay VS 2012 bạn cần cài đặt thêm

gói NuGet.

1 Tạo ứng dụng

Để các bạn dễ nắm bắt, chúng ta sẽ tạo 1 ứng dụng Console dùng Model First

để thực thi truy cập dữ liệu

Trang 35

Mở Visual Studio, chọn File -> New -> Project…, chọn Visual C# và Console

Application, đặt tên ứng dụng là DammioModelFirst, sau đó nhấn OK.

2 Tạo mô hình

Để tạo mô hình cho ứng dụng, chúng ta chọn Project, chuột phải -> Add -> Add

Trang 36

New Item…

Tiếp đến bạn chọn mục Data dưới mục Visual C# Items bên menu trái và

chọn ADO.NET Entity Data Model, đặc tên mô hình là DammioModel, chọn

Empty EF Designer Model (hoặc Empty model) và nhấn Finish để hoàn thành

Trang 38

Tiếp theo, tập tin DammioModel.edmx được mở ra với 1 mô hình trống Bây giờ

chúng ta sẽ tiếp hành xây dựng mô hình bằng cách thêm mới các thực thể

(entity), thuộc tính và các mối quan hệ giữa các thực hiện trong mô hình

Rê chuột vào vùng trống, chuột phải chọn Properties Trong cửa sổ Properties, chúng ta có thể thay đổi tên thuộc tính “Entity Container Name” với giá trị

là DammioModelContainer thành BloggingContext hay bất cứ tên nào bạn

muốn

Đây là tên context kế thừa từ lớp DbContext sẽ được tự động gieo mã nguồn, context thể hiện 1 phiên làm việc với database, cho phép chúng ta truy vấn và lưu trữ dữ liệu

Tiếp đến, chúng ta tạo 1 thực thể bằng cách chuột phải lên vùng trống,

chọn Add New -> Entity… Đặt tên thực thể là Blog và BlogId là khóa chính,

sau đó nhấn OK

Ngày đăng: 09/01/2019, 17:30

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w