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
1
Nhận Xét Của Giảng Viên
………………………………………………………………………………………………………………
………………………………………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
…………………………………………………………………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
2
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
………………………………………………………………………………………………………………
……………………………………………….
…………………………………………………………………………………………..
3
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ần
mề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 kho
lưu trữ dữ liệu. Với Entity Framework nhà phát triển có thể làm việc ở cấp trừu
tượng cao hơn khi xử lý dữ liệu, và có thể tạo và duy trì phần mềm hướng đối
tượ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
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ữ
4
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.
B.
O/RM là gì?
O/RM là một công cụ để lưu dữ liệu từ domain objects tới quan hệ dữ liệu
như MS SQL Server, nhưng tự động hóa.
O/RM gồm 3 phần chính: Domain class objects, Relational database
objects, Mapping information on how domain objects map to relational
database objects (table, views, storedprocedures).
O/RM giúp tách riêng database và domain class để dễ phát triển và maintain
Hiể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ầng
phứ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ới
DataBase, tự khai báo các biến để chạy 1 lệnh - command, rồi còn phải tính toán
đầ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?
5
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à 1
framework 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ụng
phiên bản VS 2012 thì có thể cài đặt tại đây. (Bạn phải đảm bảo Microsoft Web
Developer Tools hoặc Microsoft SQL Server Data Tools đã được cài đặt trước
khi cà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 …
Để 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.
6
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 menu
Tools -> Library Package Manager -> Package Manager Console như trong
hình.
7
Ở phần dòng lệnh dưới đáy bộ công cụ, bạn gõ: Install-Package
EntityFramework
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 trong
cửa sổ Manage NuGet Package.
8
III.
Kiến trúc của Entity Framework
Có 2 tầng chính trong ứng dụng Entity Framework:
-
Tầng model
Tầng object
Tầng model có 3 thành phần:
-
-
-
Mô hình khái niệm Conceptual – Conceptual Schema Definition Language
(CSDL): là ngôn ngữ định nghĩa các entity, relationship, hàm trong tập tin với
phần mở rộng .csdl. Có thể tạo được các entity class (object layer). Mô hình
khái niệm chứa các lớp mô hình và mối quan hệ giữa các lớp này. Điều này
để độ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ĩa
các ánh xạ giữa lớp conceptual và logical, nội dung này được lưu trong tập
tin .msl. Mô hình ánh xạ gồm thông tin về cách mô hình khái niệm được ánh
xạ đến mô hình lưu trữ.
Mô hình lưu trữ Logical – Store Schema Definition Language (SSDL): định
nghĩa mô hình lưu trữ của dữ liệu, lưu trữ trong tập tin .ssdl. Mô hình lưu trữ
là 1 mô hình thiết kế database bao gồm các bảng, view, stored procedure
(thủ tục), và mối quan hệ giữa chúng và các khóa. Mô hình này thể hiện gần
giống mô hình quan hệ các bảng trong database.
9
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. Object
Services 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ác
class này bao gồm:
▪
▪
▪
▪
Ta
EF:
ObjectContext đại diện cho một database. ObjectContext có chức
năng quản lý các kết nối, định nghĩa mô hình dữ liệu với metadata và thao
tác với database. Lớp này cũng có thể thêm vào các phương thức đại
diện cho các stored procedure trong database.
ObjectSet
là một một tập hợp các entity. Mỗi đối tượng
này tương ứng với một table. Có thể lấy được các đối tượng này thông
qua 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 và EntityReference: là các đối
tượng thể hiện mối quan hệ (relationship) giữa hai entity class. Mỗi đối
tượng này có thể được truy xuất thông qua các property của entity class.
có bảng ánh xạ tương đương sau giữa các đối tượng trong database và
Database Object
Entity Framework Object
Database
ObjectContext
Table, View
EntityObject, ComplexObject
Column
Property
Relationship
EntityCollection,
EntityReference
Ví dụ sau cho thấy cách tạo một đối tượng ObjectContext từ mô hình dữ
liệu ProductDBEntities (tên của connection string được lưu trong app.config),
10
sau đó sử dụng LINQ to Entities để lấy ra tất cả các sản phẩm (trong bảng
Productvà in ra màn:
1
ObjectContext context = new ObjectContext ("name=ProductDBEntities");
2
ObjectSet products = context.CreateObjectSet();
3
var query = from p in products
4
where p.productPrice > 18000
5
select p;
6
7
foreach (var item in query)
8
{
9
Console.WriteLine("{0,-4}{1}", item.id, item.productName);
10
}
1 Milk tea
2 Latte
3 Capuchino
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ớp
nà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:
11
Đây là cách thông thường và được hỗ trợ từ phiên bản EF 1 trong Visual Studio
2008.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ái
niệm. Chúng ta có thể dùng LINQ trong ngôn ngữ này.
12
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. Trong
quá 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ập
tin .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 đến
database. Đượ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 provider
khá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 provider
khá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ối
bằng EntityConnection, tạo các câu truy vấn bằng EntityCommand và đọc kết
quả bằng EntityDataReader.
13
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úc
lệ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ượng
EntityCommand và sử dụng tham số để lấy các sản phẩm có ID là 1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int id = 1;
using (EntityConnection con = new EntityConnection("Name=ProductDBEntities"))
{
con.Open();
EntityCommand cmd = con.CreateCommand();
cmd.CommandText = "SELECT VALUE p FROM ProductDBEntities.Products AS p WHERE
p.id = @catId";
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 qua
câ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 đọc
sá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 theo
cách hiểu các lập trình viên và dự án Web. Do đó, việc hiểu Entity
Framework nằm ở đâu trong mô hình Web 3 tầng cũng không hoàn toàn
14
dễ dàng. Trong phần này, tôi có tham khảo từ Stephen M. Redd nhằm
giúp cá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.NET
MVC.
Trong mô hình trên, chúng ta thấy vị trí của EF nằm trọn trong tầng
Data 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.
15
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ả 3
tầng Data Access Layer, Business Layer, và cả Presentation Layer. Các
bạ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 khi
không thích tuân theo tiêu chuẩn quan hệ giữa các tầng hoặc cách giải
thí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àm
tầng Data Model, và vị trí EF cũng bao hàm tầng Data Model và
16
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 ở đâu
trong mô hình Web, bạn sẽ dần khám phá để đưa ra cách hiểu và định
nghĩ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.
EF
Phiên bản đầu tiên đi kèm với .NET 3.5 SP1 và Visual Studio 2008
hay
SP1. Bản này chỉ cung cấp hỗ trợ kỹ thuật O/RM cơ bản sử dụng
EF
quy trình Database first
17
3.5
EF
Bản này đi kèm với .NET Framework 4 và Visual Studio 2010. Các
4.0
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ình
Model 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
EF
với phiên bản .NET Framework
Phiên bản 4.1 là bản đầu tiên được publish trên NuGet. Phiên bản
4.1
này thêm các tính năng: DbContext API đơn giản và quy trình Code
EF
First.
Sửa bug phiên bản trước và giới thiệu các component để giúp cho
4.1.
thời gian thiết kế để làm việc với Code Frist model dễ dàng hơn.
1
Các component này được sử dụng bởi Code First Migrations ( trong
EF
bảng EF 4.3 và EF Power Tools.
Sửa bug phiên bản trước.
4.2
EF
4.3
Phiên bản này bao đồm tính năng Code First Migrations tính năng
này cho phếp cơ sở dữ liệu được tạo ra bởi Code First có thê tăng
sự thay đổi khi Code First Model phát triển.
EF
4.3.
Phiên bản này sửa bug của phiên bản trước và giới thiệu sự hỗ trợ
LocalDb tốt hơn cho người dùng sử dụng EF 4.3 với Visual Studio
2012.
1
EF 5
Bản release này được sử dụng trong VS2010 và VS 2012 để viết
18
ứ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ợ
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.
Runtime
The EF6 runtime can be installed from NuGet. See the Get Entity
Framework page for more information.
The following features work for models created with Code First or
the EF Designer:
- Async Query and Save adds support for the task-based
asynchronous patterns that were introduced in .NET 4.5.
19
- Connection Resiliency enables automatic recovery from
transient connection failures.
- 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:
20