Khoanglang89
Bạn hãy đăng nhập hoặc đăng ký
Khoanglang89

NHẬN THIẾT KẾ WEBSITE/ SOFTWARE - LÀM ĐỒ ÁN TỐT NGHIỆP, ĐỒ ÁN CHUYÊN MÔN NGÀNH CÔNG NGHỆ THÔNG TIN


You are not connected. Please login or register

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down  Thông điệp [Trang 1 trong tổng số 1 trang]

Admin

avatar

Admin
Admin
Loading
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.

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.

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:

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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Code:
public

Code:
class

Code:
CompanyContext : DbContext
Code:
{
    
Code:
public

Code:
DbSet<Author> Authors {
Code:
get
Code:
;
Code:
set
Code:
; }
    
Code:
public

Code:
DbSet<Article> Articles {
Code:
get
Code:
;
Code:
set
Code:
; }
    
Code:
public

Code:
DbSet<Payroll> Payrolls {
Code:
get
Code:
;
Code:
set
Code:
; }
 
Code:
}
Code:
public

Code:
class

Code:
Author
Code:
{
    
Code:
public

Code:
int

Code:
AuthorId {
Code:
get
Code:
;
Code:
set
Code:
; }
    
Code:
public

Code:
string

Code:
Name {
Code:
get
Code:
;
Code:
set
Code:
; }
 
    
Code:
public

Code:
ICollection<Article> Articles {
Code:
get
Code:
;
Code:
set
Code:
; }
Code:
}
 
Code:
public

Code:
class

Code:
Article
Code:
{
    
Code:
public

Code:
int

Code:
ArticleId {
Code:
get
Code:
;
Code:
set
Code:
; }
    
Code:
public

Code:
string

Code:
Name {
Code:
get
Code:
;
Code:
set
Code:
; }
    
Code:
public

Code:
int

Code:
AuthorId {
Code:
get
Code:
;
Code:
set
Code:
; }
 
    
Code:
public

Code:
Author Author {
Code:
get
Code:
;
Code:
set
Code:
; }
Code:
}
Code:
public

Code:
class

Code:
Payroll
Code:
{
    
Code:
public

Code:
int

Code:
PayrollId {
Code:
get
Code:
;
Code:
set
Code:
; }
    
Code:
public

Code:
int

Code:
AuthorId {
Code:
get
Code:
;
Code:
set
Code:
; }
    
Code:
public

Code:
int

Code:
Salary {
Code:
get
Code:
;
Code:
set
Code:
; }
 
    
Code:
public

Code:
Author Author {
Code:
get
Code:
;
Code:
set
Code:
; }
Code:
}

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].
1
2
3
4
5
6
7
8
9
Code:
public

Code:
class

Code:
Author
Code:
{
    
Code:
[Key]
    
Code:
public

Code:
int

Code:
AuthorId {
Code:
get
Code:
;
Code:
set
Code:
; }
    
Code:
[StringLength(100)]
    
Code:
public

Code:
string

Code:
Name {
Code:
get
Code:
;
Code:
set
Code:
; }
 
    
Code:
public

Code:
ICollection<Article> Articles {
Code:
get
Code:
;
Code:
set
Code:
; }
Code:
}
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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Code:
static

Code:
void

Code:
Main(
Code:
string
Code:
[] args)
Code:
{
    
Code:
using

Code:
(
Code:
var

Code:
db =
Code:
new

Code:
CompanyContext())
    
Code:
{
        
Code:
var

Code:
author =
Code:
new

Code:
Author { Name =
Code:
"Yin Yang"

Code:
};
        
Code:
var

Code:
article =
Code:
new

Code:
Article { Name =
Code:
"Code First and Entity Framework 4.2"
Code:
};
 
        
Code:
article.AuthorId = author.AuthorId;
 
        
Code:
db.Authors.Add(author);
        
Code:
db.Articles.Add(article);
 
        
Code:
db.SaveChanges();
        
Code:
var

Code:
au = article.Author;
 
        
Code:
Console.WriteLine(
Code:
"Author: "
Code:
+ au.AuthorId +
Code:
" - "

Code:
+ au.Name);
    
Code:
}
    
Code:
Console.ReadKey();
Code:
}
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.
1
2
3
4
5
6
Code:
<
Code:
connectionStrings
Code:
>
  
Code:
<
Code:
add

Code:
name
Code:
=
Code:
"MyCompany"
    
Code:
providerName
Code:
=
Code:
"System.Data.SqlClient"
    
Code:
connectionString
Code:
=
Code:
"Server=.\SQLEXPRESS;Database=Y2Company;Trusted_Connection=true;"
Code:
/>
Code:
<!--...-->
Code:
</
Code:
connectionStrings
Code:
>
Thêm constructor sử dụng tham số kiểu chuỗi cho class CompanyContext:
1
2
3
4
5
6
7
8
9
10
11
12
Code:
public

Code:
class

Code:
CompanyContext : DbContext
Code:
{
    
Code:
public

Code:
DbSet<Author> Authors {
Code:
get
Code:
;
Code:
set
Code:
; }
    
Code:
public

Code:
DbSet<Article> Articles {
Code:
get
Code:
;
Code:
set
Code:
; }
    
Code:
public

Code:
DbSet<Payroll> Payrolls {
Code:
get
Code:
;
Code:
set
Code:
; }
 
    
Code:
public

Code:
CompanyContext()
    
Code:
{ }
    
Code:
public

Code:
CompanyContext(
Code:
string

Code:
connectionString)
        
Code:
:
Code:
base
Code:
(connectionString)
    
Code:
{ }
Code:
}
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:
1
Code:
var

Code:
db =
Code:
new

Code:
CompanyContext(
Code:
"name=MyCompany"
Code:
);
https://yinyangit.wordpress.com


_________________
Có nỗi buồn triền miên, làm trái tim hoá đá
Có những dòng lệ nhỏ, khiến đá hoá thành tim.

-------------------------------------------------------------------------------------------------------
Program Skills:  ASP.Net MVC 3/4; C#; VB.Net/ VB 6.0; Java Applet/Swing; JS/JavaScript; Bootstrap/ AngularJS; HTML/CSS; Turbo C/ Turbo C++; Pascal...
Xem mẫu Phần mêm quản lý ở đây     -           Xem mẫu Bán hàng trực tuyến ở đây
Nguyễn Ích Hoàn
new_life02081989@yahoo.com
nguyenichhoan1989@gmail.com
Xem lý lịch thành viên http://khoanglang89.forumvi.com

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang  Thông điệp [Trang 1 trong tổng số 1 trang]

Bài viết mới cùng chuyên mục

      Permissions in this forum:
      Bạn không có quyền trả lời bài viết