Tải bản đầy đủ (.docx) (45 trang)

Xây dựng chương trình quản lý khu trọ với Entity Framework

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.24 MB, 45 trang )

BÁO CÁO THỰC TẬP CHUYÊN NGÀNH
Đề tài:
Tìm hiểu EF, ứng dụng xây dựng chương trình
Quản lý khu trọ
Lời nói đầu
Một trong những yêu cầu cấp bách hiện nay là đưa CNTT vào
công tác quản lý, nhằm làm giảm bớt sức lao động của con người,
tiết kiệm thời gian, tăng độ chính xác, thu hẹp không gian lưu trữ,
tránh thất thoát và đảm bảo tính an toàn của dữ liệu.
Qua quá trình học tập tại nha trang em nhận thấy việc ứng
dụng công nghệ thông tin đang ngày càng được thể hiện rõ nét từ
việc sử dụng giấy tờ sổ sách trong công việc quản lý thì nay việc sử
dụng các phần mềm ngày một rộng rãi, đặc biệt các lĩnh vực như
quản lý nhà hàng, khách sạn, siêu thị Bên cạnh đó vẫn còn một số
lĩnh vực chưa được áp dụng CNTT như quản lý khu trọ, quầy tạp
hóa,…Việc quản lý hầu như làm trên giấy tờ, sổ sách, các công việc
liên quan đến tính toán đều được thực hiện bằng tay, làm mất rất
nhiều thời gian của người quản lý. Khu trọ XXX cũng đang gặp phải
những khó khăn như vậy và giải pháp được lựa chọn ở đây là ứng
dụng CNTT vào việc quản lý cho khu trọ này nhằm giảm bớt các khó
khăn trong công việc mà người quản lý gặp phải.
Để tránh việc mất mát, hư hỏng giấy tờ sổ sách, tất cả các
thông tin được lưu trữ trong cơ sở dữ liệu và được quản lí trên máy
tính. Việc đó làm cho độ an toàn của dữ liệu tăng lên, tốc độ tính
toán nhanh hơn . Để truy vấn tới dữ liệu cách thông thường là sử
dụng câu lệnh SQL, cách này đòi hỏi người phát triển phải bỏ ra
nhiều thời gian cho việc lập trình. Ngày nay để tiết kiệm thời gian
và công sức người ta dùng các công cụ ORM, được hiểu như là kỹ
thuật ánh xạ từ mô hình đối tượng với các table trong cơ sở dữ liệu
quan hệ. Trong đó các đối tượng ánh xạ với các bảng và quan hệ
của table trong database sẽ được ánh xạ với sự ràng buộc liên quan


trong đối tượng. Với ORM, bạn có thể thao tác truy cập, xử lý
database một cách dễ dàng và nhanh chóng. Với những ưu điểm
của công cụ ORM em chọn Entity Framework để phát triển ứng dụng
quản lý khu trọ của mình.
Chương 1: Tổng quan
1.1 Giới thiệu
Khu trọ xxx do ông xxx làm chủ chuyên cho thuê chỗ ở với giá
cả cạnh tranh, phục vụ sinh viên và những người đi làm xa quê có
nhu cầu. Khu trọ gồm bốn tầng, tầng một có bốn phòng các tầng
còn lại có năm phòng, mỗi phòng được phép ở tối đa 4 người.
Hiện nay khu trọ đang áp dụng việc quản lý khách trọ trên
giấy tờ sổ sách, tất cả mọi việc đều được làm thủ công. Vì vậy, việc
hư hỏng, mất mát giấy tờ là không tránh khỏi, cứ mỗi lần tính tiền
hóa đơn cho cả khu trọ ông phải bỏ ra rất nhiều thời gian tính toán
bằng tay và đôi khi việc tính toán tiền hóa đơn bị sai sót làm mất đi
uy tín của khu trọ. Mỗi khi muốn tìm thông tin về khách trọ hay
thông tin về hóa đơn ông phải bỏ ra không ít thời gian để tìm kiếm
trong sổ sách, việc này rất phiền phức và khó khăn khi ông không
mang kính.
1.2 Hướng giải quyết
Hiểu được sự vất vả của công việc mà ông phải trải qua, em
nhận thấy giải pháp tốt nhất để giải quyết các khó khăn này là ứng
dụng CNTT vào việc quản lý, cụ thể là xây dựng phần mềm quản lý
khu trọ nhằm đáp ứng những yêu công việc mà ông phải làm trong
quá trình quản lý, như lưu trữ thông tin trang thiết bị, thông tin
khách trọ, thông tin phòng trọ, thông tin phiếu đăng ký. Tính toán
và tạo hóa đơn tự động, tìm kiếm thông tin về khách trọ, thông tin
hóa đơn, thông tin phòng trống chính xác và nhanh chóng. Cho
phép in danh sách hóa đơn, danh sách khách trọ, danh sách phiếu
đăng ký trong tháng và lịch sử điện nước theo phòng. Phân quyền

chức năng hệ thống tránh các truy cập không được phép.
Để xây dựng các chức năng đáp ứng các yêu cầu công việc
trong khoảng thời gian giới hạn là tám tuần, công cụ Entity
Framework được áp dụng và hướng tiếp cận mà em lựa chọn là
Database First, cách này dể dàng, nhanh chóng vì CSDL đã được em
thiết kế trong thời gian phân tích thiết kế hệ thống của khu trọ.
Chương 2: Cơ sở lý thuyết
2.1 Phân tích thiết kế
2.1.1 phương pháp Merise
- Ý tưởng cơ bản của phương pháp MERISE
Mặt thứ nhất: Quan tâm đến chu kỳ sống của hệ thống. Một
hệ thống thông tin luôn trải qua bốn giai đoạn: Thai nghén - Sinh
sản - Quản trị - Chết. Thời gian sống này đối với hệ thống tổ chức
lớn có thể kéo dài từ 10 - 15 năm.
Mặt thứ hai: Đề cập đến chu kỳ nhận thức về hệ thông tin (còn
được gọi là chu kỳ trừu tượng). Sự hiểu biết về hệ thống thông tin
trải qua ba mức: Mức quan niệm, mức logic (tổ chức) và cuối cùng
là mức vật lý.
Mặt thứ ba: Mặt này có liên quan đến chu kỳ phát triển của hệ
thống. Một hệ thống thông tin luôn trải qua 3 giai đoạn: Phân tích,
thiết kế và thực hiện.
- Nội dung của phương pháp MERISE
Mức quan niệm: Là mức cảm nhận đầu tiên để xác định hệ
thống thông tin, ở mức này cần trả lời câu hỏi: Hệ thống thông tin
cần những yếu tố gì? Chức năng ra sao? Gồm những dữ liệu nào và
qui tắc quản lý như thế nào? Và tại sao có những yếu tố này? Tại
sao có những chức năng này? – Trả lời câu hỏi: What? Why?
Mức tổ chức hay logic: Là mức tổng hợp các yếu tố đã nhận
diện ở mức quan niệm. Trong mức này, cần phải trả lời được các câu
hỏi: Ai làm? Làm ở đâu và làm khi nào? Who? Where? When?

Mức vật lý: Là mức chi tiết. Về dữ liệu cần có các quan hệ cụ
thể, có một ngôn ngữ lập trình cụ thể. Về xử lý cần có đầy đủ các
đặc tả cho từng thủ tục chương trình, có sự tham khảo ngôn ngữ
trong chương trình này. Mức này trả lời câu hỏi cuối cùng: Các công
việc làm như thế nào? How?
2.1.2 Mô hình hình 3 lớp
Khi làm việc với các ứng dụng, với những dự án nhỏ thì việc
tạo một ứng dụng theo ý tưởng rất dễ dàng, tuy nhiên khi làm với
những dự án lớn hơn, cần nhiều người cùng làm hơn thì việc lập
trình trở nên phức tạp hơn, vậy nên để dễ dàng hơn trong việc quản
lý các thành phần của hệ thống cũng như ảnh hưởng tới các thành
phần khác khi ta thay đổi một thành phần, chúng ta thường nhóm
các thành phần có cùng chức năng lại với nhau. Chính vì thế các mô
hình lập trình được sinh ra, một trong những mô hình lập trình đó là
mô hình 3 lớp (3 - Layer). Được cấu thành từ Presentation, Business
Logic, và Data Access, Các lớp này sẽ giao tiếp với nhau thông qua
các dịch vụ (services) mà mỗi lớp cung cấp để tạo nên ứng dụng,
lớp này cũng không cần biết bên trong lớp kia làm gì mà chỉ cần
biết lớp kia cung cấp dịch vụ gì cho mình và sử dụng nó mà thôi.
- Presentation Layer
Lớp này làm nhiệm vụ giao tiếp với người dùng cuối để thu thập dữ
liệu và hiển thị kết quả/dữ liệu thông qua các thành phần trong giao
diện người sử dụng. Lớp này sẽ sử dụng các dịch vụ do lớp Business
Logic cung cấp. Trong .NET thì chúng ta có thể dùng Windows
Forms, ASP.NET hay Mobile Forms để hiện thực lớp này.
- Business Logic Layer
Lớp này thực hiện các nghiệp vụ chính của hệ thống, sử dụng các
dịch vụ do lớp Data Access cung cấp, và cung cấp các dịch vụ cho
lớp Presentation. Lớp này cũng có thể sử dụng các dịch vụ của các
nhà cung cấp thứ 3 (3rd parties) để thực hiện công việc của mình

(ví dụ như sử dụng dịch vụ của các cổng thanh tóan trực tuyến như
VeriSign, Paypal…).
- Data Access
Lớp này thực hiện các nghiệp vụ liên quan đến lưu trữ và truy xuất
dữ liệu của ứng dụng. Thường lớp này sẽ sử dụng các dịch vụ của
các hệ quản trị cơ sở dữ liệu như SQL Server, Oracle,… để thực hiện
nhiệm vụ của mình.
2.2 Các công cụ và ngôn ngữ lập trình
2.2.1 Bộ công cụ SQL Server 2012
Microsoft SQL Server là một hệ quản trị cơ sở dữ liệu quan hệ
(relational database management system - RDBMS) do Microsoft
phát triển. SQL Server là một hệ quản trị cơ sở dữ liệu quan hệ máy
mạng tính hoạt động theo mô hình khách chủ cho phép đồng thời
cùng lúc có nhiều người dùng truy xuất đến dữ liệu, quản lý việc
truy nhập hợp lệ và các quyền hạn của từng người dùng trên mạng.
SQL có nhiều phiên bản, trong khuôn khổ bài thực tập này em chọn
phiên bản SQL Server 2012.
SQL Server 2012 cho phép các tổ chức có thể chạy hầu hết
các ứng dụng phức tạp của họ trên một nền tảng an toàn, tin cậy và
có khả năng mở rộng, bên cạnh đó còn giảm được sự phức tạp trong
việc quản lý cơ sở hạ tầng dữ liệu. SQL Server 2012 cung cấp một
nền tảng tin cậy và an toàn bằng cách bảo đảm những thông tin có
giá trị trong các ứng dụng đang tồn tại và nâng cao khả năng sẵn
có của dữ liệu. SQL Server 2012 giới thiệu một cơ chế quản lý cách
tân dựa trên chính sách, cơ chế này cho phép các chính sách có thể
được định nghĩa quản trị tự động cho các thực thể máy chủ trên
một hoặc nhiều máy chủ. Thêm vào đó, SQL Server 2012 cho phép
thi hành truy vấn dự báo với một nền tảng tối ưu.
Nền tảng lập trình dữ liệu toàn diện của Microsoft cho phép
xây dựng các ứng dụng dữ liệu hướng đến PC, thiết bị di động, máy

chủ web và máy chủ mạng công ty. SQL Server 2012 hỗ trợ xây
dựng các ứng dụng dùng nhiều loại công nghệ kết nối có sẵn như
ODBC, ADO/OLEDB và ADO.NET. Đặc biệt, SQL Server 2012 cùng với
.NET Framework và Visual Studio Team Systems cho phép xây dựng
những ứng dụng cơ sở dữ liệu kế tiếp mạnh mẽ.
Hỗ trợ mới cho các hệ thống không kết nối thường xuyên cho
phép xây dựng các ứng dụng mà người dùng có thể đem theo dữ
liệu trên thiết bị và sau đó đồng bộ dữ liệu với máy chủ trung tâm.
SQL Server 2012 cung cấp nền tảng kho dữ liệu toàn diện và
có thể mở rộng, cho phép đưa dữ liệu vào kho dữ liệu nhanh hơn và
có thể nâng cấp để quản lý lượng dữ liệu và người dùng ngày càng
tăng, đồng thời cung cấp thông tin phân tích đến tất cả mọi người.
2.2.2 Bộ công cụ visual 2013
Visual Studio 2013 cho phép đội ngũ lập trình viên phát triển,
phân phối và quản lý ứng dụng để khai thác các thiết bị và dịch vụ
tiên tiến hiện nay. Visual Studio 2013 được bổ sung nhiều tính năng
và chức năng nhằm nâng cao chất lượng và rút ngắn thời gian phát
triển ứng dụng. Với công cụ và nền tảng được cập nhật, lập trình
viên có thể dễ dàng viết và chạy thử ứng dụng cho Windows 8.1.
Visual Studio 2013 cung cấp một bộ công cụ mạnh để xây
dựng phần mềm cho Windows, Web, các thiết bị di động và
Microsoft O•ce. Cung cấp môi trường xây dựng các ứng dụng hấp
dẫn hiện đại nhằm đáp ứng nhu cầu đáp ứng nhu cầu luôn thay đổi,
cần truy cập mọi nơi và cần dữ liệu đa dạng, phức hợp của khách
hàng. Dù nền tảng phát triển là gì, Visual Studio vẫn nâng cao hiệu
quả hoạt động của nhà phát triển bằng cách cung cấp công cụ để
họ viết mã nhanh hơn và đơn giản hoá những tác vụ liên quan đến
việc phát triển phần mềm.Với Visual Studio 2013, nhà phát triển có
thể:
- Viết mã code nhanh hơn:

Visual Studio 2013 cung cấp nhiều tính năng nâng cao hiệu quả
hoạt động, chế độ hoàn chỉnh tự động, chế độ tự điều chỉnh màu,
chế độ tra cứu phương pháp, kiểm tra lỗi đánh máy và lỗi cú pháp,
phân tích lại mã, quản lý các đoạn mã v.v LINQ (Language-
Integrated Query), tập hợp các phần mở rộng cho ngôn ngữ C# và
Visual Basic để giúp nhà phát triển có một cách tiếp cận nhất quán
và nếu cần truy vấn & chuyển đổi các tập hợp đối tượng, dữ liệu
ADO.NET, XML, cơ sở dữ liệu SQL Server thì sẽ viết ít mã hơn.
- Sử dụng công cụ tích hợp
Visual Studio 2013 cung cấp một bộ công cụ tích hợp nhưng không
phải là để viết mã. Hệ thống dự án Visual Studio sẽ giúp nhà phát
triển quản lý nhiều khía cạnh trong nỗ lực phát triển phần mềm,
bao gồm cả việc cài đặt và triển khai phần mềm. Trong một dự án,
các tính năng như Web Forms Designer, Windows Forms Designer,
Data Designer, Data Explorer, Server Explorer, công cụ tạo chương
trình, công cụ tìm và khắc phục lỗi và cả một chương trình trợ giúp
tích hợp sẽ liên kết với nhau giúp nhà phát triển làm việc hiệu quả
hơn.
2.2.3 Ngôn ngữ C#
C# bao gồm tất cả những hỗ trợ cho cấu trúc, thành phần
component, lập trình hướng đối tượng. Những tính chất đó hiện diện
trong một ngôn ngữ lập trình hiện đại. Và ngôn ngữ C# hội đủ
những điều kiện như vậy, hơn nữa nó được xây dựng trên nền tảng
của hai ngôn ngữ mạnh nhất đó là C++ và Java.
Ngôn ngữ C# là một ngôn ngữ được dẫn xuất từ C và C++,
nhưng nó được tạo từ nền tảng phát triển hơn. Microsoft bắt đầu với
công việc trong C và C++ và thêm vào những đặc tính mới để làm
cho ngôn ngữ này dể sử dụng hơn. Nhiều trong số những đặc tính
này khá giống với những đặc tính có trong ngôn ngữ Java. Không
dừng ở lại đó, Microsoft đưa ra một số mục đích khi xây dựng ngôn

ngữ này:
- C# là ngôn ngữ đơn giản: ngôn ngữ C# đơn giản vì nó dựa
trên nền tảng C và C++. Nếu người dùng thân thiện với C và
C++ thậm chí là Java, người dùng sẽ thấy C# khá giống về
diện mạo, cú pháp, biểu thức, toán tử và những chức năng
khác được lấy trực tiếp từ ngôn ngữ C và C++, nhưng nó đã
được cải tiến để làm cho ngôn ngữ đơn giản hơn.
- C# là ngôn ngữ hiện đại: những đặc tính như là xử lý ngoại lệ,
thu gom bộ nhớ tự động, những kiểu dữ liệu mở rộng và bảo
mật mã nguồn là những đặc tính được mong đợi trong một
ngôn ngữ hiện đại.
- C# là ngôn ngữ hướng đối tượng: những đặc điểm chính của
ngôn ngữ hướng đối tượng (Object-oriented laguage) là sự
đóng gói (encapsulation), sự kế thừa (inheritance) và đa hình
(polymorphism).
- C# là ngôn ngữ mạnh mẽ và cũng mềm dẻo: C# được sử dụng
nhiều cho các dự án khác nhau như là tạo ra ứng dụng xử lý
văn bản, ứng dụng đồ họa, bản tính, hay thậm chí những trình
biên dịch cho ngôn ngữ khác.
- C# là ngôn ngữ ít từ khóa: C# là ngôn ngữ sử dụng giới hạn
những từ khóa, phần lớn các từ khóa được sử dụng để mô tả
thông tin.
- C# là ngôn ngữ hướng module: mã nguồn C# có thể được viết
trong những phần được gọi là những lớp, những lớp này chứa
các phương thức thành viên của nó.
2.3 Kiến trúc Entity Framework
2.3.1 Giới thiệu
Entity Framework là một bộ ánh xạ đối tượng – quan hệ cho
phép người lập trình .NET làm việc với dữ liệu quan hệ qua các đối
tượng (object) nó giúp lập trình viên không cần viết mã cho (hầu

hết) những gì liên quan đến truy cập dữ liệu.
Entity Framework có các đặc tính nhắm đến các ứng dụng
doanh nghiệp (“Enterprise Scenarios”). Trong một doanh nghiệp,
một CSDL thông thường được kiểm soát bởi DBA (người quản trị
CSDL), cấu trúc của CSDL thông thường được tối ưu cho việc lưu trữ
(hiệu năng, tính toàn vẹn, phân hoạch) hơn là cho một mô hình ứng
dụng tốt, và có thể thay đổi qua thời gian khi dữ liệu và việc sử
dụng phát triển lên. Với ý tưởng này, Entity Framework được thiết
kế xung quanh việc xây dựng một mô hình dữ liệu hướng tới ứng
dụng, ít phụ thuộc, thậm chí có thể khác một chút so với cấu trúc
CSDL thực sự. Ví dụ, chúng ta có thể ánh xạ một lớp đơn (hay “thực
thể”) và nhiều table/view, hay ánh xạ nhiều lớp vào cùng một
table/view. Chúng ta có thể ánh xạ vào một cấu trúc phân cấp vào
một table/view đơn (như trong LINQ to SQL) hay vào nhiều
table/view (ví dụ: person, customer, employee có thể nằm trong các
bảng riêng biệt vì customer và employee chỉ chứa thêm một số
thông tin không có trong person, hoặc lặp lại các cột từ bảng
person). Chúng ta có thể nhóm các thuộc tính vào các kiểu phức
hợp (“complex”, hay “composite”), ví dụ một kiểu Customer có thể
có thuộc tính “Address” với kiểu Address có các thuộc tính Street,
City, Region, Country và Postal). Entity Framework cũng cho phép
chúng ta biểu diễn quan hệ nhiều-nhiều một cách trực tiếp, mà
không cần tới bảng kết nối như một thực thể trong mô hình dữ liệu,
và có một đặc tính mới được gọi là “Deˆning Query”, có thể được
dùng cho việc biểu diễn một bảng ảo với dữ liệu lấy từ một câu truy
vấn (ngoài trừ việc cập nhật phải thông qua một stored procedure).
Khả năng ánh xạ mềm dẻo này, bao gồm tùy chọn dùng các stored
procedure để xử lý các thay đổi, có thể được thực hiện chỉ bằng
cách khai báo, hoặc chỉnh sửa lại khi yêu cầu thay đổi, mà không
cần phải biên dịch lại ứng dụng.

2.3.2 Các thành phần trong Entity Framework
- Code là mã lệnh tạo thành các lớp đối tượng dữ liệu cho phé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,…)
Có 3 cách sử dụng Entity Framework: Code First, Models First,
Database First.
- Database ˆrst: là phương pháp chỉ nên dùng khi ta đã có sẵn
CSDL (không phải tạo), EF Wizard sẽ tạo Model và Code cho
ta. Đâ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 chúng ta từ database có sẵn thông
qua công cụ Entity Data Model Wizard. Chúng ta 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
- Models ˆrst: nên dùng khi ta bắt đầu thiết kế CSDL từ đầu (từ
chưa có gì). Ta sẽ thiết kế mô hình CSDL (Model) EF sẽ tự tạo
code cho ta, sau đó nhờ EF Wizard tạo CSDL. Chúng ta 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ế, chúng ta có thể sử dụng chức
năng Generate Database from Model để tạo ra các mã DDL
(data deˆnition language) dựa trên mã SSDL (Store Schema
Deˆnition Language). Các mã DDL này sẽ được thực thi và lưu
thành tập tin .sql.
- Code ˆrst: nên dùng khi đã có mô hình CSDL, ta sẽ chỉ viết
code từ đó tạo Database. Hướng tiếp cận này bỏ qua phần
Model (.edmx), chúng ta có thể thiết kế các class tương ứng

với các table của database mà chúng ta cần làm việc hoặc
muốn tạo ra. Với hướng tiếp cận này, chúng ta 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 chúng ta 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.
2.3.3 Đặc điểm của Entity Framework
- Sử dụng DbContext
DbContext là đối tượng UnitOfWork, chính là mẫu thiết kế về
truy xuất CSDL khá thông dụng. Khi áp dụng mẫu này, chúng ta sẽ
có một đối tượng theo dõi các thay đổi của dữ liệu, và đối tượng đó
sẽ quản lý việt cập nhật những thay đổi đến CSDL. Điều này cũng
có nghĩa là DbContext sẽ giữ bản sao chép cục bộ của dữ liệu (ở
CSDL) với những thay đổi chưa được cập nhật.
Đối tượng DBContext phải có thời gian sống ngắn, mẫu Unit Of
Work khuyên chúng ta nên có đối tượng UnitOfWork cho mỗi giao
dịch. Bởi vì đối tượng này giữ bản sao của dữ liệu và những thay đổi
của nó, cho nên nó phải nhanh chóng cập nhật CSDL để phòng
trường hợp có truy vấn khác đến dữ liệu này.
Chúng ta hầu như không thể xử lý được mọi tình huống truy
xuất/cập nhật đồng bộ. Nhưng việc giảm thời gian sống của
DbContext càng ngắn càng tốt, vì chúng ta đang giảm nguy cơ xảy
ra các mâu thuẫn khi xử lý đồng bộ như đã nêu trên.
Với lập trình web, ta nên giữ đối tượng DbContext sống trong
vòng đời một web request đến ứng dụng. Nếu ta lấy lên quá nhiều
dữ liệu, DbContext sẽ làm cho trang web chạy chậm lại, vì vậy
chúng ta nên kết thúc vòng đời của DbContext càng sớm càng tốt,
và vòng đời của DbContext được gắn với vòng đời của mỗi request
là điều nên làm.
Việc tạo mới và hủy một đối tượng không làm chúng ta quá

tốn kém CPU hay bộ nhớ, và cần nhớ rằng, việc hủy các đối tượng
càng sớm càng tốt là một trong những kinh nghiệm tốt mà chúng ta
nên tuân theo và đối tượng DbContext của EF cũng không phải là
ngoại lệ.
-Sử dụng Entity SQL
Entity SQL là một ngôn ngữ truy vấn lưu trữ độc lập mà là
tương tự như SQL. Entity SQL cho phép bạn truy vấn thực thể dữ
liệu, hoặc là đối tượng hoặc dưới dạng bảng. Chúng ta nên xem xét
sử dụng Entity SQL trong các trường hợp sau đây:
Khi một truy vấn được tự động xây dựng tại thời điểm runtime:
trong trường hợp này, nên xem xét sử dụng các phương pháp xây
dựng truy vấn của ObjectQuery thay vì xây dựng một chuỗi truy vấn
SQL Entity tại thời điểm runtime.
Khi muốn định nghĩa một truy vấn như là một phần của định
nghĩa mô hình: chỉ Entity SQL được hỗ trợ trong một mô hình dữ
liệu.
Khi sử dụng EntityClient trả về thực thể dữ liệu chỉ đọc như
rowsets sử dụng một EntityDataReader.
Nếu là một chuyên gia về ngôn ngữ truy vấn SQL, Entity SQL
có vẻ tự nhiên nhất để sử dụng.
-Sử dụng ObjectContext.
ObjectContext là lớp chính trong Entity Framework tương tác
với cơ sở dữ liệu. ObjectContext duy trì kết nối với cơ sở dữ liệu và
cũng quản lý tất cả các theo tác đọc và ghi.
Entity Data Model có thể được truy vấn sử dụng LINQ to
Entities hoặc Entity Sql hoặc bằng các phương pháp LINQ. Cho dù
các phương pháp truy vấn nào, kết quả luôn được trả về như là các
đối tượng. Tất cả các đối tượng được trả về bởi một truy vấn được
gắn vào một ObjectContext.
Sử dụng ObjectStateManager, ObjectContext theo dõi các thay

đổi cho các đối tượng và áp dụng các thay đổi để lưu trữ dữ liệu.
Các ObjectStateManager giữ tài liệu tham khảo của tất cả các đối
tượng. Khi một giao dịch xảy ra, các ObjectContext theo dõi thứ tự
của các hoạt động và tạo ra SQL để thực hiện các hoạt động có hiệu
quả.
Khi chúng ta truy vấn một đối tượng với các ObjectContext,
thông tin về các đối tượng được lưu trữ trong bộ quản lý trạng thái
ObjectContext. Và, khi chúng ta gọi SaveChanges () phương pháp
của ObjectContext, ObjectContext tìm kiếm tất cả các đối tượng
trong ObjectStateManager và làm những hành động thích hợp trên
mỗi đối tượng.
- Có thể làm việc với các CSDL: Oracle, DB2, MySQL, SQL Server
- Tạo ra ˆle .edmx, .csdl, .msl, .ssdl hoặc các ˆle class .cs thông
thường
- Hỗ trợ các kiểu phức tạp
- Có thể tạo CSDL từ Model/Code đã thiết kế
- Có thể ánh xạ 1-1, 1-nhiều, nhiều-1, nhiều-nhiều giữa đối tượng
entity với table/view
Chương 3: Nội dung và kết quả thực tập:
3.1 Phân tích thiết kế
3.1.1 Quy trình hoạt động của hệ thống.
Khi có khách trọ đến thuê phòng ở, chủ trọ sẽ kiểm tra xem
còn phòng trống hay không. Nếu tất cả các phòng đã đầy thì chủ
trọ thông báo cho khách, ngược lại thì cho khách biết thông tin về
phòng như tên phòng, loại phòng, giá phòng, trạng thái của phòng
(đặt cọc, cần thêm người, sửa chửa), số người đang ở (nhỏ hơn hoặc
bằng bốn), cùng danh sách các thiết bị có trong phòng, giá cả các
dịch vụ như điện, nước. Nếu khách đồng ý thuê phòng thì chủ trọ
yêu cầu đóng tiền đặt cọc và ghi lại thông tin của khách như tên,
giới tính, ngày sinh, quê quán, số điện thoại cùng các thông tin cá

nhân liên quan để lập phiếu đăng ký thuê phòng, khách trọ vừa
đăng ký sẽ có trạng thái là đang ở để chỉ khách trọ đang ở trong
khu trọ. Khi khách trọ chuyển vào ở thì tiền đặt cọc sẽ được trả lại
cho khách, chủ trọ yêu cầu khách ghi bản khai nhân khẩu, tạm trú
tạm vắng để trình báo cơ quan công an. Còn nếu sau 1 tuần kể từ
ngày đăng ký khách không vào ở thì tiền đặt cọc sẽ thuộc về chủ
trọ, thông tin phiếu đăng ký của khách đó sẽ bị hủy, trạng thái của
khách được sửa thành không ở để chỉ khách không ở trong khu trọ.
Cuối tháng chủ trọ đi đến từng phòng ghi lại số công tơ điện,
số công tơ nước và kiểm tra các thiết bị rồi ghi lại trạng thái (sử
dụng, sửa chửa, hỏng, làm mất). Đầu tháng chủ trọ sửa chửa và cập
nhật lại trạng thái cũng như chi phí và ngày sửa thiết bị, cập nhật
giá dịch vụ, tính tiền điện, nước và các chi phí liên quan của mỗi
phòng sau đó lập hóa đơn thu tiền từng phòng. Hóa đơn vừa được
tạo có trạng thái chưa thanh toán, khi hóa đơn được thanh toán đầy
đủ thì trạng thái của hóa đơn là đã thanh toán. Nếu phòng nào đó
chỉ đóng tiền một phần vì có khách trọ nợ tiền hóa đơn thì trạng
thái của hóa đơn là thanh toán một phần và thông tin tiền nợ của
khách được ghi lại. Khi khách trả tiền nợ cho hóa đơn thì trạng thái
của hóa đơn là đã thanh toán. Lúc khách trọ không ở nửa muốn trả
phòng thì phải thông báo cho chủ trọ và thanh toán hết các khoản
tiền mà khách còn nợ, trạng thái của khách được đặt lại là không ở
để chỉ khách không còn ở.
Chủ trọ có toàn quyền trên hệ thống, nếu sau này có thuê
nhân viên thì chủ trọ sẽ cho phép nhân viên một số quyền trên hệ
thống, những người dùng khác chỉ được tra cứu thông tin về phòng
trống, lịch sử sử dụng điện nước của phòng.
- Đặc tả dữ liệu:
• Khách Trọ: Mỗi khách trọ của khu trọ được quản lý các thông
tin sau đây: Họ tên, giới tính, ngày sinh, số CMND, quê quán,

nghề nghiệp, địa chỉ nơi làm việc, số điện thoại, tiền nợ, trạng
thái, chú thích.
• Phòng: Mỗi phòng được quản lý các thông tin sau đây: Tên
phòng, loại phòng, giá phòng, trạng thái.
• Dịch vụ: Một dịch vụ của khu trọ được quản lý các thông tin
sau đây: Tên dịch vụ, giá dịch vụ, tính theo.
• Thiết bị: Mỗi thiết bị được quản lý các thông tin say đây: Tên
thiết bị, trạng thái, mô tả.
• Phiếu đăng ký: Mỗi phiếu đăng ký thuê phòng quản lý các
thông tin sau đây: Người đăng ký, phòng, ngày đăng ký, chú
thích.
• Hóa đơn: Mỗi hóa đơn đước tính toán từ: Tiền phòng, tiền tiền
điện nước và các chi phí khác cùng các thông tin như ngày
lập, trạng thái.
- Chức năng hệ thống
• Cập nhật thông tin các bảng: Dịch Vụ, Trạng Thái Phòng, Trang
Bị, Trạng Thái Trang Bị, Thiết Bị, Trạng Thái Hóa Đơn, Phòng,
Loại Phòng, Điện, Nước, Khách Trọ, Phiếu Đăng Ký, Người
Dùng, Quyền.
• Tính toán tiền điện nước
• Tìm kiếm các phòng còn trống và thông tin của phòng đó
• Tìm kiếm thông tin khách trọ
• Tìm kiếm hóa đơn
• Lập phiếu đăng ký thuê phòng
• Lập hóa đơn
• Lập danh sách hóa đơn của tất cả các phòng trong tháng
• Lập báo cáo quá trình sử dụng điện nước
• Lập báo cáo phiếu đăng ký trong tháng
• Báo cáo danh sách khách trọ
- Bảng giá các dịch vụ:

Loại Đơn Giá
Điện 3.000 VNĐ /1kWh
Nước 9.500 VNĐ /m3
Loại Tầng
Tiền phòng 1 1.100.000 VNĐ/Tháng
Tiền phòng 2 1.000.000 VNĐ /tháng
Tiền phòng 3 900.000 VNĐ /tháng
Tiền phòng 4 800.000 VNĐ /tháng
Tiền đặt cọc 1,2,3,4 200.000 VNĐ
- Công thức tính toán
Tiền điện = Số kw điện sử dụng * giá tiền điện
Tiền nước = Số m3 nước sử dụng * giá tiền nước
Tiền khác = Tiền sửa chửa thiết bị nếu có
Tổng tiền = Tiền phòng, Tiền điện + Tiền nước + Tiền khác
3.1.2 Các mô hình dữ liệu
- Mô hình quan niệm dữ liệu
- Mô hình tổ chức dữ liệu
Quyền (Mã Quyền, Tên Quyền, Chức năng)
Người Dùng (MaND, Tên, HoTen, GioiTinh, DienThoai, CMND,
QueQuan, Luong, Mật Khẩu, Mã Quyền)
Dịch vụ (Mã Dịch Vụ, Tên Dịch Vụ, Giá Dịch Vụ, Tính Theo)
Loại Phòng (Mã Loại Phòng, Tên Loại Phòng, Giá Phòng)
Trạng Thái Phòng (Mã Trạng Thái, Tên Trạng Thái)
Phòng (Mã Phòng, Tên Phòng, Mã Loại Phòng, Mã Trạng Thái)
Khách Trọ (Mã Khách Trọ, Họ Tên, Quê Quán, Ngày Sinh, Giới Tính,
Điện Thoại, CMND, Nghề Nghiệp, Địa Chỉ nơi Làm Việc, Tiền Nợ, Chú
Thích)
Phiếu Đăng Ký (Số phiếu, Mã Khách Trọ, Mã Phòng, Ngày Đăng Ký,
Chú Thích)
Điện (Mã Phòng, Tháng, Số Cũ, Số Mới)

Nước (Mã Phòng, Tháng, Số Cũ, Số Mới)
Thiết Bị (Mã Thiết Bị, Tên Thiết Bị)
Trạng Thái Trang Bị (Mã Trạng Thái, Tên Trạng Thái)
Trang Bị (Mã Thiết Bị, Mã Phòng, Mã Trạng Thái, Mô Tả, Ngày Sửa
Gần Nhất, Chí Phí Sửa Chửa)
Trạng Thái Hóa Đơn (Mã Trạng Thái, Tên Trạng Thái)
Hóa Đơn (Mã Hóa Đơn, Mã Phòng, Ngày Lập, Tiền Phòng, Tiền Điện,
Tiền Nước, Tiền Khác, Mã Trạng Thái, Chú Thích )
- Mô hình vật lý dữ liệu
Quyền (Mã Quyền, Tên Quyền, Chức năng)
Tên cột Kiểu dữ liệu
Mã Quyền Tinyint
Tên Quyền nvarchar (10)
Chức năng Nvarchar(30)
Dữ liệu ví dụ:
Mã Quyền Tên Quyền Chức năng
1 Chủ trọ 11111 1101 101000 11 111
1011
2 Quản lý 11111 1111 111111 11 111
1111
Người Dùng (MaND, Tên, HoTen, GioiTinh, DienThoai, CMND,
QueQuan, Luong, Mật Khẩu, Mã Quyền)
Tên cột Kiểu dữ liệu
MaND Tinyint
Tên Nvarchar (50)
HoTen Nvarchar(40)
GioiTinh Bit
DienThoai Nvarchar(11)
CMND Nvarchar(12)
QueQuan Nvarchar(50)

Luong Decimal(9,0)
Mật Khẩu Nvarchar (32)
Mã Quyền Tinyint
Dữ liệu ví dụ:
MaND Tên Họ Tên Giới tính Điện Thoại CMND
1 chutr
o
Trần
Văn Lâm
Nam 01659078
698
1839182
53
1 quanl
y
Vương
Anh Tú
Nam 01658735
099
1839182
54
Quê Quán Lương Mật Khẩu Mã Quyền
Diên Phước 0 123abc 1
Vinh Thọ 120000
0
abc123 2
Dịch vụ (Tên Dịch Vụ, Giá Dịch Vụ, Tính Theo)
Tên cột Kiểu dữ liệu
Tên Dịch Vụ Nvarchar (10)
Giá Dịch Vụ Decimal (9,0)

Tính Theo Nvarchar (10)
Dữ liệu ví dụ:
Mã Dịch Vụ Tên Dịch Vụ Giá Dịch Vụ Tính Theo
1 Điện 3000 1 kwh
2 Nước 5000 1 m3
Loại Phòng (Mã Loại Phòng, Tên Loại Phòng, Giá Phòng)
Tên cột Kiểu dữ liệu
Mã Loại Phòng Tinyint
Tên Loại Phòng Nvarchar (10)
Giá Phòng Decimal (9,0)
Dữ liệu ví dụ:
Mã Loại Phòng Tên Loại Phòng Giá Phòng
1 Tầng một 1100000
2 Tầng hai 1000000
3 Tầng ba 900000
4 Tầng bốn 800000
Trạng Thái Phòng (Mã Trạng Thái, Tên Trạng Thái)
Tên cột Kiểu dữ liệu
Mã Trạng Thái Tinyint
Tên Trạng Thái nvarchar (10)
Dữ liệu ví dụ:
Mã Trạng Thái Tên Trạng Thái
1 Trống
2 Đầy
3 Sửa chữa
4 Đặt cọc
5 Cần người
Phòng (Mã Phòng, Tên Phòng, Mã Loại Phòng, Mã Trạng Thái)
Tên cột Kiểu dữ liệu
Mã Phòng Nchar(3)

Tên Phòng Nvarchar (25)
Mã Loại Phòng Tinyint
Mã Trạng Thái Tinyint
Dữ liệu ví dụ:

Phòng
Tên Phòng Mã Loại Phòng Mã Trạng Thái
101 Phòng thứ nhất
tầng một
1 2
202 Phòng thứ hai tầng
hai
2 2
303 Phòng thứ ba tầng
ba
3 2
Khách Trọ (Mã Khách Trọ, Họ Tên, Quê Quán, Ngày Sinh, Giới Tính,
Điện Thoại, CMND, Nghề Nghiệp, Địa Chỉ nơi Làm Việc, Tiền Nợ, Chú
Thích)
Tên Cột Kiểu dữ liệu
Mã Khách Trọ Smallint
Họ Tên Nvarchar (40)
Quê Quán Nvarchar (100)
Ngày Sinh Smalldatetime
Giới Tính Bit
Điện Thoại Nvarchar (11)
CMND Nvarchar (12)
Nghề Nghiệp Nvarchar (50)
Địa Chỉ Nơi Làm Việc Nvarchar (100)
Tiền Nợ Decimal (9,0)

TrangThai Bit
Chú Thích Nvarchar (100)
Dữ liệu ví dụ:

Khách
Trọ
Họ Tên Quê
Quán
Ngày
Sinh
Giới
Tính
Trạng
Thái
1 Nguyễn Văn
Tèo
Diên
Khánh –
Nha Trang
3/3/199
2
True True
2 Trần Văn
Lâm
Yên
Thành –
Nghệ An
2/3/198
5
True True

3 Nguyễn Thị
Hiền
Can Lộc
– Hà Tĩnh
5/4/199
3
Fals
e
True
Điện
Thoại
CMND Nghề
Nghiệp
Địa Chỉ
Nơi Làm
Việc
Tiền Nợ Chú
Thích
0165903
8067
0011830
00001
Sinh
Viên
ĐH Nha
Trang
100000 Vay tiền
12/10/14
0949228
224

1839187
57
Nhân
Viên
GMC
Nha Trang
0965252 0360870 Sinh ĐH Nha 250000 Vay tiền
321 00067 Viên Trang 13/10/14
Phiếu Đăng Ký (Số phiếu, Mã Khách Trọ, Mã Phòng, Ngày Đăng Ký,
Chú Thích)
Tên cột Kiểu dữ liệu
Số phiếu Smallint
Mã Khách Trọ Smallint
Mã Phòng Tinyint
Ngày Đăng Ký Smalldatetime
Chú Thích Nvarchar (100)
Dữ liệu ví dụ:
Số phiếu Mã Khách
Trọ
Mã Phòng Ngày Đăng

Chú
Thích
1 11 1 10/9/2013
4 21 3 5/10/2013
2 33 4 1/10/2013
Điện (Mã Phòng, Tháng, Số Cũ, Số Mới)
Tên cột Kiểu dữ liệu
Mã Phòng Nchar(3)
Tháng Smalldatetime

Số Cũ Int

×