Thứ Tư, 28 tháng 11, 2012

Understand ‘+’, ‘>’ and ‘~’ symbols in CSS Selector

It explains How to use different signs (+,> and ~) in CSS selector and their differences. Before starting, let us take a sample code to understand the signs.
?
1
2
3
4
5
6
7
8
<div id="container">
   <p>First</p>
    <div>
        <p>Child Paragraph</p>
    </div>
   <p>Second</p>
   <p>Third</p>
</div>

Space:

?
1
2
3
div#container p{
font-weight:bold;
}
It is the descendant selector. It will target all p tags within container div.

> Sign:

It will target elements which are DIRECT children of a particular element.
?
1
2
3
div#container > p {
  border: 1px solid black;
}
 Understand +, > and ~ symbols in CSS Selector
It will target all P element which are direct children of container div, not children of child div.

+ Sign:

It is Adjacent sibling combinator. It combines two sequences of simple selectors having the same parent and the second one must come IMMEDIATELY after the first.
?
1
2
3
div + p {
   color: green;
}
css%20selector%203 Understand +, > and ~ symbols in CSS Selector
It will only select the first element that is immediately preceded by the former selector. In our example, it will target to Second ONLY because the owner P element comes just after Div tag.

~ Sign:

It is general sibling combinator and similar to Adjacent sibling combinator. the difference is that the second selector does NOT have to immediately follow the first one means It will select all elements that is preceded by the former selector.
?
1
2
3
div ~ p{
background-color:blue;
}

css%20selector%204 Understand +, > and ~ symbols in CSS Selector
It will target both second and third.
Hope, you enjoyed this.

(http://techbrij.com/654/css-selector-adjacent-child-sibling)

How to set or test connection string

For a developer, the MOST COMMON problem is the database connectivity. The most common reason is wrong connection string. Here are the steps to test connection string and see connection problem.

Step 1: Open http://www.connectionstrings.com/
Step 2: Select Database
Step 3: Choose proper format of connection string of a particular provider.
Step 4: Replace you database information in connection string and use it.
Step 5: Still you are facing problem then problem is in your database information.
To check information, in windows
1. Start-> Run-> Type notepad
2. In notepad-> File->Save As -> Type “test.udl”
3. Now close test.udl and Right click on this file Icon and Click on properties
4. First select provider then go to Connection tab
5. Insert Database Information
6. Click on “Test Connection” Button
7. If It is not OK means database is not being accessed, update database information and put it in (step 4) connection string on which test connection succeeded.
OR
Open udl file in notepad again and see connection string.
Note: Password may be absent in connection string due to security purpose. so in this case It is needed to insert manually.
Hope, It helps.

(http://techbrij.com/203/how-to-set-or-test-connection-string)

Thứ Ba, 27 tháng 11, 2012

10+ Notepad++ Tips For Fast Development

Notepad++ is an open-source text editor for Windows. I have to work on different technologies, It’s not possible to install all editors (like Dreamweaver, Visual studio 2010, …etc) on my old machine. So I use Notepad++ as my default text-editor. It’s simple and fast. Here are some tips for web developer and designer to use it effectively.

1. Box Selection:

Similar to VS 2010, Box Selection (aka column selection, block selection, or rectangular selection) exists in Notepad++. You need to hold down the Alt key while doing a selection; you can select a block horizontally.
 10+ Notepad++ Tips For Fast Development

2. Extended Search Mode:

Generally, It is needed to convert new line/tab character. Suppose you have to remove new line character:
Press Ctrl+H , Select the ‘Extended Search Mode’. Use \n in find what and nothing in replace with textbox. Click Replace All to remove new line character.

3. Vertical Tab View:

Suppose you have to see two files and compare manually. You can open tab in vertical tab view. For this, Right click on tab > “Move to Other View”. Use F8 to toggle the views.
 10+ Notepad++ Tips For Fast Development

4. Minify JS:

You can remove unnecessary space in your js file and can minify before deploying.
Edit > Blank Operations > Trim Header and Trailing Space
Edit > Blank Operations > Remove Unnecessary Blank and EOL

5. Delete Line Numbers or First word:

Generally when we copy code from website and paste it we get line numbers or special char, we need to remove this. You can do this in Notepad++ easily.
TextFX > TextFX Tools > Delete Line Numbers or First word

6. Add Line Numbers:

You can add line numbers by Edit > Column Editor > Number to Insert > Set Initial Number and Increase By >OK
You can add any text also.

7. AutoClose HTML/XML tags:

If you’re working with HTML or XML files, it closes every HTML tag as you type.
TextFX > TextFX Settings>Autoclose XML/HTML tags

8. HTML Encode:

As a blogger, I have to post html source code. I need html encode before posting. It’s very easy in Notepad++
TextFX > TextFX Convert > Encode HTML

9. Generate Dynamic Controls Quickly:

Suppose you have to create html controls dynamically.For this, First create static Html layout. Select Proper Language and
TextFX > TextFX Convert > Convert Text to Code Command
It will take care of Quotes and line breaks.

10. Setup HTML Tidy:

Suppose you have html body content only and you have to create proper html file then it is very handy to use html tidy.
TextFX > TextFX HTML Tidy > Tidy(Most Recent HTMLTIDY.CFG)

11. Launch in Browser:

You can test html file in browser by clicking RUN and select Launch in Browser.

12. Align Lines:

It’s my favorite feature. You can line up multiple lines by ,(comma), = (equal sign) or clipboard character. It is very useful and helpful in Box selection.
TextFX > TextFX Edit > line up multiple lines by …
 10+ Notepad++ Tips For Fast Development

13. Others:

Remove Blank Lines:
TextFX > TextFX Edit > Delete Blank Lines
TextFX > TextFX Edit > Delete Surplus Blank Lines
Change Case:
TextFX > TextFX Characters > select the case in which you want to convert.
The major inbuilt options can be performed using extended search mode. If you have other tips, leave a comment.
Enjoy Notepad++!!!

(http://techbrij.com/518/10-notepad-tips-tricks-fast-development)

Thứ Bảy, 24 tháng 11, 2012

VS – 10 cải tiến đáng giá trong Visual Studio 2010

Không giống như các phiên bản Visual Studio (VS) trước, VS 2010 được viết hoàn toàn bằng WPF.  VS 2010 không chỉ đem đến sự khác biệt về giao diện mà còn cung cấp những cải tiến đáng giá trợ giúp rất nhiều cho công việc viết code. Ta cùng điểm qua 10 cải tiến trong rất nhiều những thay đổi của phiên bản VS 2010 này. Phiên bản mà tôi sử dụng là Visual Studio 2010 Ultimate.

Update: So sánh các phiên bản của Visual Studio 2010
Visual Studio 2010 Comparison (microsoft)

1. Recent Projects

Tính năng này được cải thiện cho phép bạn có thể stick các project để chúng luôn nằm phía trên các project khác. Thêm vào đó, bạn cũng có thể remove các project khỏi danh sách và mở thư mục project:

 2. Intellisense

Một tính năng đặc biệt quan trọng và không thể thiếu trong VS. Trong các phiên bản trước, tính năng này sẽ nhảy tới từ bắt đầu với chuỗi bạn gõ trong một danh sách từ cố định (keywork, class, method,…). Trong VS 2010, danh sách từ sẽ được lọc ra và chỉ bao gồm cả các từ chứa chuỗi mà bạn gõ. Ví dụ khi bạn gõ “List”, VS  sẽ lọc ra các từ chứa chuỗi này như “IList”, “LinkedList<>”,…

Một điểm đặc biệt nữa là VS có thể lọc các từ theo dạng viết tắt nếu chuỗi mà bạn gõ là chữ hoa. Ví dụ nếu bạn gõ “LL”, VS sẽ lọc ra hai từ là “LinkedList<>” và “LinkedListNode<>”.

 3. References Navigation

VS 2010 sẽ tự động highlight các tham chiếu tại từ mà bạn đặt cursor. Ngoài việc giúp bạn quan sát tốt hơn, tính năng này còn cho phép di chuyển cursor giữa các từ tham chiếu này bằng phím tắt Ctrl + Shift + Down và Ctrl + Shift + Up.

 4. Navigate To/ Quick Search

Tính năng này có thể coi là sự kết hợp giữa Intellisense, Find and Replace và tính năng Go to Definition (F12) để nhảy đến phần khai báo của đối tượng, phương thức,… tại vị trí cursor. Tuy nhiên tính năng này sẽ tìm kiếm khái quát hơn dựa vào chuỗi tìm kiếm. Bạn sử dụng tính năng này bằng cách nhấn “Ctrl + ,” hoặc chọn Navigate To trong menu Edit. Khi gõ nội dung tìm kiếm, cửa sổ sẽ hiển thị các kết quả khớp trong tất cả file. Bạn có thể sử dụng chuỗi tìm kiếm tương đối như Intellisense.

 5. Box Selection

Trước đây, VS cho phép bạn chọn một vùng văn bản hình chữ nhật bất kì bằng giữ phím Alt và rê chuột chọn. Tính năng này rất hữu ích khi bạn muốn muốn chọn một phần code mà không muốn giữ lại những khoảng trắng thụt lề (do tính năng Indenting) phía trước.
Trong phiên bản VS, tính năng này được cải tiến cho phép bạn không chỉ chọn mà có thể sửa chữa hàng loạt theo từng dòng. Để thực hiện tinh năng này, bạn giữ Shift + Alt và rê chuột tạo vùng chọn. Sau đó bạn có thể sửa nội dung trong vùng chọn này. Các phần của mỗi dòng nằm trong vùng chọn sẽ thay đổi theo nội dung mà bạn gõ vào.
Ví dụ sau tôi sử dụng tính năng này để sửa kiểu dữ liệu của các biến a, b, c từ int sang float:

 6. View Call Hierarchy

Tính năng này giúp bạn xem tất cả lời gọi đến và đi của các method, property,…Để sử dụng, bạn nhấn phải chuột tại method cần xem Call Hierarchy và chọn View Call Hierarchy (Ctrl + K, Ctrl + T).
Ta có ví dụ sau, thực hiện View Call Hierarchy tại phương thức MethodA() trong Main():
01class Program
02{
03    static void Main()
04    {
05 
06        MethodA();
07    }
08 
09    static void MethodA()
10    {
11        MethodB();
12    }
13    static void MethodB()
14    {
15        MethodC();
16    }
17    static void MethodC()
18    {
19        MethodA();
20    }
21}
Cửa sổ Call Hierarchy sẽ hiển thị các lời gọi đi và đến:

7. Floating/Docking Window

VS 2010 cho phép các cửa sổ ở chế độ Float có thể di chuyển tự do hơn. Bạn có thể di chuyển các cửa sổ vào bất kì cửa sổ nào và Dock theo năm kiểu (Left, Right, Top, Botton, Fill), bạn thậm chí có thể kéo cửa sổ ra ngoài VS :

8. Code Generation

Tính năng này có lẽ không xa lạ gì với bạn. Tôi thường dùng nó để tạo ra các khai báo method tự động sau khi gõ tên method đâu đó trong project. Tính năng này trong VS 2010 được nâng cấp cho phép tạo ra class, struct, interface, enum.
Tại vị trí mà bạn gõ vào các tên các thành phần không tồn tại, bạn có thể đặt chuột bên dưới chữ cái đầu tiên của từ (phần hình chữ nhật màu xanh lam bên dưới chữ cái đầu tiên) hoặc nhấn phím tắt Shift + Alt + F10 hay “Ctrl + .” để hiển thị menu tùy chọn tạo thành phần tương ứng.
Chọn Generate new type nếu bạn muốn tự xác định các thông tin như phạm vi truy xuất, kiểu (class, struct, enum,…), tên, file.

9. Generate Sequence Diagram

Đây là một tính năng rất hay giúp tạo ra sequence diagram từ method hoặc property. Bạn chỉ cần nhấn chuột phải tại method, property bắt đầu và chọn Generate Sequence Diagram.


10. Importing/Exporting Breakpoints

Bạn có thể export một hoặc tất cả breakpoint trong project và lưu thành file với định dạng XML. Sau đó bạn có thể import trở lại các breakpoint khi cần thiết (ví dụ khi cần debug). Để export một breakpoint, bạn nhấn phải chuột vào breakpoint và chọn Export… Để export tất cả breakpoint, bạn phải mở cửa sổ Breakpoints bằng cách vào menu Debug > Windows > Breakpoints (Ctrl + Alt + B). Trong cửa sổ này bạn sẽ thấy các nút Export all breakpoints…Import breakpoints …

http://yinyangit.wordpress.com
(http://yinyangit.wordpress.com/2011/07/07/vs-10-impovement-feautures-of-visual-studio-2010/)

LINQ to SQL – Các khái niệm cơ bản: Object-Relational Mapping, Entity Class, Association và DataContext

Là một API được tạo ra để làm việc với SQL Server, LINQ to SQL đem lại hướng tiếp cận mới cho việc truy xuất và thao tác dữ liệu từdatabase. Sử dụng phương pháp ánh xạ giữa các đối tượng database và đối tượng trong lập trình (ORM), bạn có thể truy vấn dữ liệu giống như LINQ to Object.

Các khái niệm cơ bản

Entity Class
Bằng cách ánh xạ một table trong database thành một lớp, ta có thể thao tác dữ liệu trên đó bằng mã lệnh lập trình và tất nhiên bao gồm các lambda expression lẫn LINQ. Các lớp được ánh xạ này được gọi là các lớp entity. Như vậy, một lớp được sẽ được ánh xạ đến một table, theo đó một property sẽ được dùng để ánh xạ cho column của table.Việc ánh xạ này được gọi là ORM (object-relational mapping) chính là đặc điểm cơ bản của LINQ to SQL.
Việc ánh xạ này trong .NET được áp dụng bằng cách đặt các attribute cho class, property, method, … kĩ thuật này được gọi là Attribute-based Mapping.Bảng sau đây cho thấy các ánh xạ tương ứng của các đối tượng database vào các đối tượng lập trình:
Database Object LINQ Object
Database DataContext
Table Class and Collection
View Class and Collection
Column Property
Relationship Nested Collection
Stored Procedure Method
Để tạo một thể hiện của table với entity class, ta sử dụng lớp Table. Đối tượng này đại diện cho một table với TEntity là kiểu dữ liệu hay tên của entity class mà bạn tạo ra. Ví dụ với lớp Employee, bạn có thể tạo một đối tượng Table
Khi tạo các entity class, bạn nên đặt tên theo dạng số ít.Ví dụ bạn có một table là Books thì tên lớp entity tương ứng nên là Book. Điều này rất dễ hiểu vì một entity class chỉ đại diện cho một dòng dữ liệu trong table. Đây cũng là một tiêu chuẩn đặt tên, như bạn cũng có thể thấy trong .NET, các tên lớp đều ở dạng số ít.
Association
Giống như giữa các bảng trong database, các entity class cũng có thể có một mối quan hệ với nhau dựa theo primary key và foreign key. Ví dụ lớp Category chứa primary key CategoryID liên kết với foreign key CategoryID trong lớp Product. Tức là một Category có thể bao gồm nhiều Product (trong database thì Categories là bảng cha của Products).
Để thể hiện mối quan hệ cha con giữa hai entity class như trên, người ta sử dụng thuật ngữ Association. Trong trường hợp này, lớp Category sẽ chứa một collection các đối tượng Product. Collection này có kiểu là EntitySet, với TEntity là kiểu của entity class chứa foreign key.
public EntitySet Products;
Tương tự như vậy bên lớp Product, cũng cần phải có một tham chiếu đến lớp Category có quan hệ với nó. Điều này được thực hiện bằng cách sử dụng một đối tượng EntityRef, lưu ý rằng đây không phải là một collection.
public EntityRef Category;
Một câu hỏi có thể được đặt ra là tại sao không dùng trực tiếp kiểu là Category và IList mà phải là EntityRef và EntitySet. Nguyên nhân điều này là do cơ chế deferred  khi thực hiện truy vấn của các toán tử trong LINQ. Các đối tượng Category và Product sẽ không tồn tại trong hai lớp này cho đến khi chúng được cần tới. Để hiểu thêm về cơ chế này bạn có thể tham khảo bài viết: LINQ – Deferred operator và cơ chế thực hiện truy vấn
DataContext
DataContext được dùng để thiết lập kết nối với database, ngoài ra đối tượng này còn quản lý một các định danh của đối tượng, theo dõi các thay đổi và thực hiện “phiên dịch” các thao tác mà bạn thực hiện trên đối tượng entity thành các câu SQL tương ứng để thực thi trên database.
Có thể coi DataContext là một đối tượng đại diện cho toàn bộ database tương tự như DataSet, nhưng được kết hợp chức năng của các đối tượng connection, command và data adapter trong ADO.NET.

Để tạo một thể hiện của DataContext, bạn cần truyền một connection string cho nó. Connection string này có thể là chuỗi đường dẫn đến tập tin database hoặc tên của SQL Server.
DataContext db = new DataContext(connectionString);
Từ đối tượng DataContext này, bạn có thể lấy các table cần thiết bằng phương thức generic GetTable() với kiểu trả về là một đối tượng Table. Bởi vì lớp Table này được hiện thực các interface IEnumerable và IQueryable, bạn có thể sử dụng các toán tử LINQ để thao tác để truy vấn dữ liệu.
DataContext db = newDataContext(connectionString);
Table employees = db.GetTable();
Tuy nhiên hướng tiếp cận thường được áp dụng là bạn sẽ tạo một sub class tương ứng cho database cần làm việc. Ví dụ ta làm việc với database Northwind, việc tạo ra một class NorthwindDataContext cùng với các property và phương thức cần thiết sẽ giúp việc sử dụng dễ dàng và hiệu quả hơn trong quá trình phát triển ứng dụng.
Nếu điều này làm bạn cảm thấy rắc rối, hãy yên tâm vì Visual Studio có thể tự động tạo ra tất cả cho bạn. Việc bạn cần làm chỉ là lựa chọn database và sử dụng sao cho hiệu quả cho từng trường hợp cụ thể.

Tạo Entity Class

Phần này sẽ hướng dẫn bạn các bước thủ công cần làm để tạo một lớp ánh xạ tương ứng với một bảng trong database đồng thời thực hiện truy vấn dữ liệu thông qua LINQ.
Đây chỉ là một ví dụ đơn giản giúp bạn hiểu rõ hơn mô hình này, trong các ứng dụng thực tế bạn nên dùng công cụ O/R Designer (Object Relational Designer) trong Visual Studio để thiết kế trực quan.
Ngoài hai attribute là TableAttribute và ColumnAttribute được giới thiệu dưới đây, còn có những loại attribute khác DatabaseAttribute, AssociationAttribute, FunctionAttribute,… nằm ngoài phạm vi của bài viết này.
TableAttribute
Trong ví dụ này ta sẽ tạo một entity class của bảng Employees trong Northwind database. Sử dụng hai attribute [Table] và [Column], ta tạo lớp Employee như sau:
1[Table(Name = "Employees")]
2public class Employee
3{
4    [Column(IsPrimaryKey = true)]
5    public int EmployeeID { get; set; }
6    [Column]
7    public string Country { get; set; }
8}
Tên của class và các property phải trùng với tên table và cột tương ứng. Nếu bạn muốn đặt tên class và property khác, cần phải sử dụng thuộc tính Name của attribute [Table] và [Column]. Như trong đoạn mã trên, tôi dùng thuộc tính Name để xác định tên của table là Employees.
Tham khảo: TableAttribute
ColumnAttribute
Giả sử bạn muốn đặt tên lại cho EmployeeID thành ID, khi đó ta phải dùng thêm thuộc tính Name cho attribute [Column] này:
1[Table(Name = "Employees")]
2public class Employee
3{
4    [Column(IsPrimaryKey = true,Name="EmployeeID")]
5    public int EmployeeID { get; set; }
6    [Column]
7    public string Country { get; set; }
8}
Thuộc tính IsPrimaryKey của [Column] rất rõ ràng, xác định một column có phải là khóa chính hay không.
Tham khảo: ColumnAttribute

Ví dụ hoàn chỉnh

Trong ví dụ này tôi sẽ tạo một entity class cho bảng Employees trong database Northwind. Bạn sẽ thấy cách tôi tạo các property cho entity class đều theo cú pháp tắt (auto implemented property). Đối với các ứng dụng phức tạp với yêu cầu xử lý nhiều hơn thì bạn nên tạo một private field và hiện thực property trên đó.
Các bước bạn sẽ thực hiện trong phần này:
1. Tạo một Console Application
2. Add reference thư viện System.Data.Linq và hai chỉ thị sử dụng namespace:
using System.Data.Linq;
using System.Data.Linq.Mapping;
3. Tạo các Entity class tương ứng với mỗi bảng trong database sẽ sử dụng.
4. Tạo một DataContext kết nối đến database.
5. Thực hiện truy vấn trên dữ liệu từ DataContext.
Chương trình C# sau sẽ cho tạo một DataContext kết nối tới tập tin Northwind.mdf, lấy về table Employees và in ra các employee có cột Country là “USA”:
01using System;
02using System.Linq;
03using System.Data.Linq;
04using System.Data.Linq.Mapping;
05 
06namespace LinqToSqlTest
07{
08    class Program
09    {
10        static void Main()
11        {
12 
13        // Tạo một DataContext từ file Northwnd.mdf
14        DataContext db = new DataContext("C:\\SampleDatabases\\Northwnd.mdf");
15        // Lấy table Employees
16        Table employees = db.GetTable();
17        // Lấy các employee từ USA
18        var query = from e in employees
19        where e.Country == "USA"
20        select e;
21 
22        Console.WriteLine("ID \t Country");
23        foreach (var emp in query)
24        Console.WriteLine("{0} \t {1}",
25        emp.EmployeeID, emp.Country);
26 
27        Console.Read();
28        }
29    }
30 
31    [Table(Name = "Employees")]
32    public class Employee
33    {
34        [Column(IsPrimaryKey = true)]
35        public int EmployeeID { get; set; }
36        [Column]
37        public string Country { get; set; }
38    }
39}
Output:
ID       Country
1        USA
2        USA
3        USA
4        USA
8        USA
Câu truy vấn LINQ sau:
1var query = from e in employees
2where e.Country == "USA"
3select e;
Trả về các dòng có Country là “USA” với dữ liệu lấy từ tất cả các cột. Bởi vì ta chỉ cần lấy hai thuộc tính là EmployeeID và Country, câu truy vấn này có thể sửa thành:
1var query = from e in employees
2where e.Country == "USA"
3select new
4            {
5                EmployeeID = e.EmployeeID,
6                Country = e.Country
7            };
Đoạn truy vấn trên có thể được viết dưới dạng cú pháp extension method với lambda expression:
01var query = employees
02   .Where(e => (e.Country == "USA"))
03   .Select(
04      e =>
05new
06         {
07             EmployeeID = e.EmployeeID,
08             Country = e.Country
09         }
10   );
Và tương đương với câu truy vấn SQL sau:
1SELECT[t0].[EmployeeID], [t0].[Country]
2FROM[Employees]AS[t0]
3WHERE[t0].[Country]= 'USA'

Kết luận

Bài viết này giúp bạn nắm được nền tảng cơ bản của LINQ to SQL, hiểu được cách tạo ánh xạ để truy xuất dữ liệu cũng như các khái niệm quan trọng như DataContext, Entity.Qua bài này, bạn cần rút ra một điểm chính là LINQ to SQL sẽ tạo các Entity class ánh xạ từ các đối tượng trong database, qua đó bạn có thể kết nối và thực hiện truy vấn trên các đối tượng này.
Thay vì tạo các Entity class như trong bài viết này, .NET và Visual Studio hỗ trợ hai công cụ là SQLMetal và Object Relational Designer cho phép bạn làm điều này một cách dễ dàng. Tuy nhiên trước khi bắt đầu sử dụng hai công cụ này, bạn nên dành một chút thời gian để tìm hiểu cách tạo cùng cách hoạt động của các entity class cho một database hoàn chỉnh. Ta sẽ thảo luận vấn đề này trong bài viết tới.

(http://yinyangit.wordpress.com/2011/08/11/linq-to-sql-basic-concepts-object-relational-mapping-entity-class-association-and-datacontext/)

Thiết kế Entity Data Model – Part 3: Code First

Bài này giới thiệu cách sử dụng EF 4.1 để thiết kế Entity Data Model theo hướng Code First. Sử dụng Code First, bạn phải làm thủ công toàn bộ việc định nghĩa các class của object layer. Nhờ đó bạn sẽ hiểu sâu hơn cách hoạt động và cấu trúc của các class này.

ADO.NET Entity Framework 4.2

Phiên bản EF 4.1 cung cấp hai tính năng mới:
  • The DbContext API is a simplified abstraction over ObjectContext and a number of other types that were included in previous releases of the ADO.NET Entity Framework. The DbContext API surface is optimized for common tasks and coding patterns.
  • Code First is a new development pattern for the ADO.NET Entity Framework and provides an alternative to the existing Database First and Model First patterns. Code First is focused around defining your model using C#/Visual Basic .NET classes, these classes can then be mapped to an existing database or be used to generate a database schema. Additional configuration can be supplied using Data Annotations or via a fluent API.
Phiên bản 4.2 vừa được phát hành đầu tháng 11/2011 và  sửa một số lỗi của phiên bản EF 4.1. Để cài đặt EF 4.2, bạn cần dùng đến công cụ Package Manager Console trong Visual Studio. Công cụ được cung cấp trong menu Tools> Library Package Manager>Package Manager Console.
Khi cửa sổ này được mở ra, tại dấu nhắc dòng lệnh PM>, hãy gõ vào “Install-Package EntityFramework”, hãy chờ một lúc để chương trình download và cài đặt EF 4.2.
Package Manager Console - Installing Entity Framework 4.2
Nếu cần gỡ bỏ, bạn có thể gõ lệnh “Uninstall-Package EntityFramework”.

Tạo các entity class

Để sử dụng Code First trong Entity Framework, bạn cần phải thêm tham chiếu đến các assembly cần thiết vào dự án:
  • EntityFramework
  • System.ComponentModel.DataAnnotations
  • System.Data.Entity
Với phiên bản EF 4.1, bạn có thể thêm các tham chiếu thủ công. Tuy nhiên với EF 4.2, bạn có thể làm điều này bằng cách cài đặt package EntityFramework.Preview. Bạn thực hiện điều này bằng cách làm theo các bước sau:
-          Tạo một dự án với tên EntityFrameworkDemo.
-          Vào menu Project>Add Library Package Reference.
-          Trong cửa sổ hiện ra, qua thẻ Online và gõ vào textbox tìm kiếm tên của package là “EntityFramework.Preview”.
-          Sau khi tìm được, nhấn Install để tiến hành cài đặt.
Install EntityFramework.Preview Package
Sau đó, bạn có thể tạo các class để thực hiện thao tác với database. Trong ví dụ này tôi sẽ tạo các class cho database như sau:
PublishingCompany Database
Các class của object layer, bao gồm một context và các entity được định nghĩa trong C# như sau:
public class CompanyContext : DbContext
{
    public DbSet Authors { get; set; }
    public DbSet
Articles { get; set; } public DbSet Payrolls { get; set; } } public class Author { public int AuthorId { get; set; } public string Name { get; set; } public ICollection
Articles { get; set; } } public class Article { public int ArticleId { get; set; } public string Name { get; set; } public int AuthorId { get; set; } public Author Author { get; set; } } public class Payroll { public int PayrollId { get; set; } public int AuthorId { get; set; } public int Salary { get; set; } public Author Author { get; set; } }

Bổ sung thông tin cho các entity class với Data Annotation

Các field của một table cần phải được xác định các thông tin như kiểu dữ liệu, khóa chính, … Tôi làm điều này bằng cách dùng các attribute trong System.ComponentModel.DataAnnotations.
Ví dụ trong class Author, tôi xác định AuthorId là khóa chính bằng attribute [Key], và xác định số kí tự tối đa cho Name là 100 bằng attribute [StringLength].
public class Author
{
    [Key]
    public int AuthorId { get; set; }
    [StringLength(100)]
    public string Name { get; set; }

    public ICollection
Articles { 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
Bạn có thể tham khảo hướng dẫn về các annotation này tại Data Annotations in the Entity Framework and Code First.

Kiểm tra kết quả

Để kiểm tra các class đã tạo trên, tôi thực hiện chèn hai dòng dữ liệu vào hai table Authors và Articles. Các table này tương ứng là hai property Authors và Articles của đối tượng CompanyContext. Sau khi đã thực hiện chèn dữ liệu vào, tôi sẽ thử sử dụng một navigation property là Article.Author để xem nó có trả về đúng kết quả không.
static void Main(string[] args)
{
    using (var db = new CompanyContext())
    {
        var author = new Author { Name = "Yin Yang" };
        var article = new Article { Name = "Code First and Entity Framework 4.2"};

        article.AuthorId = author.AuthorId;

        db.Authors.Add(author);
        db.Articles.Add(article);

        db.SaveChanges();
        var au = article.Author;

        Console.WriteLine("Author: "+ au.AuthorId + " - " + au.Name);
    }
    Console.ReadKey();
}
Kết quả:
Author: 1 - Yin Yang
Như bạn thấy tôi hoàn toàn không gán giá trị cho property article.Author, nhưng property này article hoàn toàn chứa tham chiếu đến đối tượng author mà tôi đã chèn vào database, và do đó, in ra được thông tin của author.
Mở Sql Server lên, bạn có thể thấy một database mới tự động được tạo với tên EntityFrameworkDemo.CompanyContext, đây chính là tên đầy đủ của class context mà tôi tạo trong phần trên.

Xác định database sẽ kết nối với connection string

Class DbContext cho phép truyền một  chuỗi kết nối vào constructor. Vì vậy nếu như đã có sẵn một database hoặc muốn đặt tên cho database sẽ được tạo ra, bạn có thể xác định bằng cách truyền chuỗi kết nối cho DbContext. Ví dụ tôi muốn database sẽ được tạo ra phải tên là “Y2Company”, tôi thực hiện bằng cách thêm một chuỗi kết nối với tên “MyCompany” vào tập tin App.Config.

  


Thêm constructor sử dụng tham số kiểu chuỗi cho class CompanyContext:
public class CompanyContext : DbContext
{
    public DbSet Authors { get; set; }
    public DbSet
Articles { get; set; } public DbSet Payrolls { get; set; } public CompanyContext() { } public CompanyContext(string connectionString) :base(connectionString) { } }
Và sửa lại một chút trong phương thức Main(), chú ý phần khởi tạo đối tượng CompanyContext:
var db = new CompanyContext("name=MyCompany");
http://yinyangit.wordpress.com
(http://yinyangit.wordpress.com/2011/11/30/thiet-ke-entity-data-model-part-3-code-first/)

Thiết kế Entity Data Model – Part 2: Model First

Tiếp theo phần 1 về Databate First, bài viết này sẽ trình bày về cách tạo Entity Data Model (EDM) theo hướng Model First. Dựa vào tính năng này, bạn có thể thiết kế được một database thông qua giao diện trực quan của Entity Data Model Designer trong Visual Studio.

Thiết kế Entity Data Model

Việc thiết kế EDM theo hướng Model First có thể coi là một bài tập tạo một EDM thủ công bằng công cụ Entity Data Model Designer. Việc thiết kế bằng công cụ không khó nếu như bạn đã quen thuộc với Visual Studio và từng làm việc các loại database.
Đầu tiên, bạn cần thêm một phần tử ADO.NET Entity Data Model vào dự án (Add New Item…). Trong cửa sổ Entity Data Model Wizard hiện ra, chọn Empty model, sau đó nhấn Finish.
Create Empty Entity Data Model

Sau khi thêm vào, tập tin .edmx sẽ được thêm vào trong Solution Explorer và tự động được mở ra với công cụ Entity Data Model Designer. Tuy nhiên bởi vì là một model rỗng, bạn cần dùng các mục trong Toolbox hoặc menu ngữ cảnh để tạo ra các entity và mối liên hệ giữa chúng.
Trong ví dụ này tôi tạo ba entity là: Person, AuthorBook. Ngoài ra tôi tạo thêm một complex type là PersonInfo với hai property là Address và Phone đều có kiểu dữ liệu là String.
Nếu bạn cảm thấy khó khăn khi làm quen với Entity Data Model Designer, hãy đọc một số hướng dẫn dưới đây.
-      Tạo một complex type bằng cách nhấn phải vào vùng trống chọn Add>Complex Type. Một mục mới sẽ được thêm vào trong mục Complex Types ở cửa sổ Model Browser. Hãy đặt tên cho complex type này và nhấn phải vào đó thể thêm các property cần thiết.
Model Browser - Complex Type
-      Để thêm một property vào entity, nhấn phải vào entity chọn Add>Scalar Property hoặc Add>Complex Property. Sau đó bạn có thể chọn kiểu dữ liệu trong cửa sổ Properties.
-      Tạo mối liên hệ (relationship) giữa các entity bằng cách dùng Association trên Toolbox hoặc nhấn phải vào entity chọn Add>Association. Sau khi tạo, hai navigation property tương ứng sẽ xuất hiện trong mỗi entity. Các navigation property này giúp cho các đối tượng entity có tham chiếu đến nhau dễ dàng hơn trong quá trình sử dụng.
-      Việc tạo một mối liên hệ thừa kế (inheritance) tương tự như tạo association. Khi tạo một thừa kế (inheritance) giữa hai entity, entity con sẽ được thừa hưởng tất cả property của entity cha. Điều này tương ứng với mối quan hệ 1-1 trong database.
Sau khi tạo, tôi có được một model như sau:
Entity Data Model Designer

Tạo database từ Entity Data Model

Sau khi hoàn thành việc thiết kế model (tập tin .edmx), bạn hãy nhấn phải vào vùng trống của Entity Data Model Designer và chọn Generate Database from Model… Trong cửa sổ Generate Database Wizard hiện ra, bạn có thể lựa chọn một database có sẵn để thêm các table mới vào. Tuy nhiên tôi sẽ tạo ra một database mới bằng cách nhấn vào New Connection. Trong cửa sổ Connection Properties, tôi sử dụng Data source là Microsoft SQL Server, chọn Server name và nhập database name bất kì, ở đây tôi đặt là Test. Nhấn OK.
Create New  Database Connection
Bởi vì server tôi chọn chưa có database Test, một hộp thoại xác nhận hiện ra yêu cầu tạo database này. Hãy nhấn OK để tiếp tục.
Trong cửa sổ wizard, nhấn Next và bạn sẽ thấy các mã DDL sẽ được tạo ra và lưu trong tập tin Model1.edmx.sql. Nhấn Finish và tập tin .sql này sẽ được mở ra. Bạn có thể thấy rằng các tên table sắp được tạo ra được tự động chuyển về dạng số nhiều dựa vào tên của entity. Trong trường hợp này là entity Person sẽ được chuyển thành table People.
EF - Generate Database Wizard - DDL

Bạn có thể chỉnh sửa lại nội dung để phù hợp hơn. Tuy nhiên, bạn cũng cần phải sửa lại các ánh xạ trong tập tin .edmx cho phù hợp. Nếu không cần thiết, bạn hãy bỏ qua việc chỉnh sửa này.
Ví dụ tôi sửa tên các field của table People là Info_Address thành Address và Info_Phone thành Phone. Sau đó mở tập tin .edmx với XML Editor và chỉnh sửa lại các tên này tương ứng như trên. Có thể sử dụng chức năng Find and Replace.
Sau khi chỉnh sửa, hãy kiểm tra lại nội dung của nó bằng cách dùng chức năng Validate SQL Syntax. Nếu chưa kết nối, cửa sổ Connect to Database Engine của SQL Server sẽ hiện ra để yêu cầu kết nối. Nhấn Connect để tiếp tục.
Entity Framework - Content of DDL File
Sau khi kết nối, các mã sql của tập tin này sẽ được thực thi bằng cách nhấn phải vào cửa sổ soạn thảo hiện tại chọn Execute SQL. Nếu thấy thông điệp “Command(s) completed successfully.” hiện ra ở cửa sổ bên dưới là đã thành công.
Bạn có thể mở SQL Management Studio lên để kiểm tra database này, mô hình của database này có dạng như hình dưới.
SQL Server Management Studio 2008

Kiểm tra kết quả: Thêm dữ liệu vào table People

Mở tập tin App.Config bạn có thể thấy chuỗi kết nối được thêm vào với tên mặc định trùng với tên của lớp context là Model1Container (thừa kế từ ObjectContext). Ta sẽ tạo một thể hiện của Model1Container để thêm một đối tượng Author vào database.
Vì Author được thừa kế từ Person, Model1Container chỉ cung cấp duy nhất một phương thức
static void Main(string[] args)
{
    Model1Container db = new Model1Container();
 
    PersonInfo info=new PersonInfo(){ Address="123 HCM City", Phone="00-123-456"};
 
    Author a = new Author() {Name="Yin Yang", Email = "yinyang.itATgmailDOTcom" };
    a.Info = info;
    db.AddToPeople(a);
    db.SaveChanges();
 
    Console.WriteLine("Entity has been inserted to the database.");
    Console.Read();
}
Mặc dù chỉ thêm một đối tượng Author, nhưng dữ liệu sẽ được phân chia vào hai table là People và People_Author trong database. Có thể coi việc tạo hai entity Person và Author là không cần thiết và có thể nhập lại thành một. Việc tách ra hai entity thế này chỉ cần khi bạn có nhiều entity cùng thừa kế. Kết quả trong database sau khi chạy ví dụ trên:
Peope and Author Tables
http://yinyangit.wordpress.com
(http://yinyangit.wordpress.com/2011/11/28/cac-huong-thiet-ke-entity-data-model-part-2-model-first/)

Thiết kế Entity Data Model – Part 1: Database First

Là thành phần trung gian giữa ứng dụng và database, Entity Data Model (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 đối tượng bussiness (hay object layer) trong ứng dụng. Dựa vào sự lựa chọn thành phần nào sẽ được tạo ra trước, 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.

Các sơ đồ dưới đây minh hoạt mối quan hệ và thứ tự tạo ra giữa các thành phần dữ liệu trong ứng dụng của Entity Framework. Phần Model tương ứng với tập tin .edmx, Code tương ứng với tập tin .cs (hoặc .vb nếu bạn dùng VB.NET).
Entity Framework design approaches
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.
Database First:
Đâ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.

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ừng bước dựa vào công cụ Entity Data Model Designer. Dữ liệu nguồn được sử dụng trong ví dụ là Northwind (download tại http://www.microsoft.com/download/en/details.aspx?id=23654).
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à  NorthwindModel với phần mở rộng mặc định là .edmx. Nhấn Add.
Insert ADO,NET Entity Data Model
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ọn mặc định là Generate from database và nhấn Next.
Entity Data Model Wizard - Step 1
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 Save entity connection settings in App.Config, chuỗi kết nối này sẽ tự động được thêm và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à NorthwindEntities.
Entity Data Model Wizard - Step 2
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 New Connection… Các kết nối mà bạn đã tạo sẽ hiện ra trong cửa sổ Server Explorer. Nhấn Next.
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, tôi chỉ sử dụng ba table là Orders, Order Details và Products.
Entity Data Model Wizard - Step 3
Sau khi nhấn Finish, tập tin NorthwindModel.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.NET Entity Data Model Designer với giao diện trực quan như hình dưới. Nếu muốn coi 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à Mapping Details.
Entity Data Model Designer
Ngoài tập tin .edmx trên, một tập tin khác cũng được tự động tạo ra là NorthwindModel.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à: NorthwindEntities, Order, Order_Detail và Product. Trong đó, class  NorthwindEntities 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.

Kiểm tra kết quả với LINQ to Entities

Việ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:
// ...
NorthwindEntities db = new NorthwindEntities();

var query = from p in db.Products
            where p.CategoryID == 1
            select p.ProductName;

foreach (var item in query)
{
    Console.WriteLine(item);
}
// ...
Output:
Chai
Chang
Guaraná Fantástica
Sasquatch Ale
Steeleye Stout
Côte de Blaye
Chartreuse verte
Ipoh Coffee
Laughing Lumberjack Lager
Outback Lager
Rhönbräu Klosterbier
Lakkalikööri


http://yinyangit.wordpress.com
(http://yinyangit.wordpress.com/2011/11/26/cac-huong-thiet-ke-entity-data-model-part-1-database-first/)

Tổng quan kiến trúc của Entity Framework

ADO.NET Entity Framework là một nền tảng được sử dụng để làm việc với database thông qua cơ chế ánh xạ Object/Relational Mapping (ORM). Nhờ đó, bạn có thể truy vấn, thao tác với database gián tiếp thông qua các đối tượng lập trình.

Kiến trúc của Entity Framework được minh họa như sau:
Entity Framework architecture
Các nội dung dưới đây sẽ đi vào giải thích từng phần trong sơ đồ trên. Trong giới hạn của bài viết, tôi chỉ đi khái quát để bạn nắm được nội dung chính. Trong thực tế, bạn cũng không cần biết sâu hơn về kiến trúc bên dưới trừ những mục đích đặc biệt.

Object Services

Đâ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:
-      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.
-      EntityCollectionEntityReference: 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.
Ta có bảng ánh xạ tương đương sau giữa các đối tượng trong database và EF:
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 NorthwindEntities (tên của connection string được lưu trong app.config), sau đó sử dụng LINQ to Entities để lấy ra các sản phẩm (trong bảng Products) có tên bắt đầu bằng “G” và in ra màn:
01// …
02ObjectContext context = new ObjectContext("name=NorthwindEntities");
03 
04ObjectSet products = context.CreateObjectSet();
05 
06var query = from p in products
07            where p.ProductName.StartsWith("g")
08            select p;
09 
10foreach (var item in query)
11{
12    Console.WriteLine("{0,-4}{1}",item.ProductID, item.ProductName);
13}
14// …
Output:
6   Grandma's Boysenberry Spread
15  Genen Shouyu
22  Gustaf's Knäckebröd
24  Guaraná Fantástica
26  Gumbär Gummibärchen
31  Gorgonzola Telino
33  Geitost
37  Gravad lax
44  Gula Malacca
56  Gnocchi di nonna Alice
69  Gudbrandsdalsost

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:
-      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).
-      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.
-      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.
Entity Mapping Model
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ì.

EntityClient Data Provider

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.
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ó CategoryID là 1:
01int categoryID = 1;
02using (EntityConnection con = new EntityConnection("Name=NorthwindEntities"))
03{
04    con.Open();
05    EntityCommand cmd = con.CreateCommand();
06    cmd.CommandText = "SELECT VALUE p FROM NorthwindEntities.Products AS p WHERE p.CategoryID = @catId";
07    cmd.Parameters.AddWithValue("catId", categoryID);
08    EntityDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
09    while (reader.Read())
10    {
11        var name = reader["ProductName"];
12        var catId=reader["CategoryID"];
13        Console.WriteLine("{0,-3}{1}",catId,name);
14    }
15    reader.Close();
16}
17// ...
Output:
CategoryID ProductName
1          Chai
1          Chang
1          Guaraná Fantástica
1          Sasquatch Ale
1          Steeleye Stout
1          Côte de Blaye
1          Chartreuse verte
1          Ipoh Coffee
1          Laughing Lumberjack Lager
1          Outback Lager
1          Rhönbräu Klosterbier
1          Lakkalikööri

yinyangit.wordpress.com
(http://yinyangit.wordpress.com/2011/11/24/tong-quan-ve-kien-truc-entity-framework/)