[Editorial Unfinished] 
Giả sử bạn đã có kinh nghiệm sử dụng 2 công nghệ truy xuất dữ liệu  ADO.NET và Entity framework, vậy loại nào tốt hơn?

Trước hết điểm qua một vài thông tin quan trọng:
  • Chúng đều là công nghệ làm việc xoay quanh nền tảng .NET do Microsoft cung cấp.  ADO.NET đã có từ lâu, và EF hay còn gọi là ADO.NET Entity Framework ra đời sau và đầy chức năng mạnh mẽ.
  • Cả hai đều làm việc với nhiều loại Cơ sở dữ liệu khác nhau, ở đây ta chỉ ví dụ với SQL Server.
  • ADO.NET được tích hợp sẵn trong .NET Framework, ngược lại EF được đưa lên Nuget.org, khi cần sử dụng EF bạn phải cài đặt package vào dự án của mình (tất nhiên là cần kết nối internet để cài đặt).
  • ADO.NET yêu cầu bạn gửi lệnh SQL Commands hoặc sử dụng Stored Procedure trên SQL Server  để truy vấn dữ liệu, và bạn cũng cần triển khai các hàm xử lý điều này một cách dài dòng. Trong khi đó EF không cần bạn phải thông thạo SQL Server, có sẵn công cụ cho bạn generate liên kết giữa database và chương trình của bạn, sau đó có thể sử dụng Linq để truy vấn dữ liệu.
  • Không xét tới tính bảo mật hay sự hỗ trợ ứng dụng doanh nghiệp vừa và lớn hay không, rõ ràng EF là công cụ tốt nhất hiện nay để truy xuất dữ liệu trong nền tảng .NET. EF cho phép tăng tốc thời gian phát triển, khả năng bảo trì mã tốt hơn, bởi vì làm việc với EF bạn sẽ không cần quan tâm quá nhiều đến những công việc khó khăn để truy xuất dữ liệu từ Cơ sở dữ liệu.
  • Ngoài ra với tương lai của công nghệ đám mây, EF sẽ đáp ứng tốt nhu cầu làm việc của bạn.

Để có một cái nhìn trực quan, ta đi xem một dự án mẫu. Sau đó bạn sẽ tự đưa ra cho mình quan điểm về câu hỏi đầu bài viết.
Trong ví dụ này, tôi cố gắng triển khai hết các cách sử dụng ADO.NET và EF.

A. ADO.NET

Có một vài lớp mà bạn cần nắm rõ thông tin cơ bản sau:
(Hai namespace cần dùng là System.Data.SqlClient, System.Data)
  • SqlConnection: Lớp này xử lý việc đóng mở kết nối đến database.
  • SqlCommand: Lớp này giúp bạn gửi lệnh SQL hoặc tên của Procedure cùng tham số nếu cần. Bạn phải sử dụng phương thức phù hợp để gửi lệnh đi, tương đương với kết quả trả về là một table, một column hay là một số kiểu Int ghi nhận số rows được thực thi do lệnh Insert, Update, Delete chẳng hạn.
  • SqlDataReader: Duyệt kết quả theo từng dòng từ kết quả SqlCommand trả về. Giờ bạn cần duyệt để lấy kết quả cuối cùng ra.
  • SqlDataAdapter: Về kĩ thuật thì nó cũng phải sử dụng SqlCommand để gửi lệnh, nhưng giờ SqlCommand là một thuộc tính của SqlDataAdapter. Sau cùng bạn đổ kết quả từ SqlDataAdapter lên DataSet hoặc Table, hoặc duyệt sang danh sách tùy bạn.
  • DataSet: Dùng để lưu trữ dữ liệu của các Table như một bộ nhớ cache. Bạn có thể lưu xuống XML (hoặc dạng khác mà bạn biết) như là một database local nếu thấy cần thiết!

Ví dụ sẽ có 2 table dữ liệu như sau:
CREATE TABLE Department (
Did INT PRIMARY KEY NOT NULL,
Name NVARCHAR (50) NULL
);

CREATE TABLE Employee (
Id INT IDENTITY (1,1) NOT NULL,
FullName NVARCHAR (50) NULL,
[Address] NVARCHAR (50) NULL,
Did INT FOREIGN KEY (Did) REFERENCES Department NULL
);

Và tốt hơn là ta nên tạo Store Procedure, thay vì truyền lệnh trực tiếp qua SqlCommand ta truyền tên của SP:
--Department
GO
CREATE PROCEDURE spDepartment_GetAll
AS
BEGIN
SELECT Did, Name FROM Department
END

GO
CREATE PROCEDURE spDepartment_Insert
@Name Nvarchar(50)=NULL
AS
BEGIN
INSERT INTO Department(Name) VALUES(@Name)
END

GO
CREATE PROCEDURE spDepartment_Update
@Did Int,
@Name Nvarchar(50)=NULL
AS
BEGIN
UPDATE Department
SET Name=@Name
WHERE Did= @Did
END

GO
CREATE PROCEDURE spDepartment_Delete
@Did Int
AS
BEGIN
DELETE Department WHERE Did=@Did
END

--Employee
GO
CREATE PROCEDURE spEmployee_GetAll

AS
BEGIN
SELECT Id, FullName, [Address],Did FROM Employee
END

GO
CREATE PROCEDURE spEmployee_Insert
@FullName Nvarchar(50),
@Address Nvarchar(50)= NULL,
@Did int
AS
BEGIN
INSERT INTO Employee(FullName,[Address],Did) VALUES(@FullName,@Address,@Did)
END

GO
CREATE PROCEDURE spEmployee_Update
@Id Int,
@FullName Nvarchar(50)=NULL,
@Address Nvarchar(50)= NULL,
@Did int
AS
BEGIN
UPDATE Employee
SET FullName=@FullName, [Address]=@Address,Did=@Did
WHERE Id= @Id
END

GO
CREATE PROCEDURE spEmployee_Delete
@Id int
AS
BEGIN
DELETE Employee
WHERE Id=@Id
END
--/


Figure 1: Hướng truy cập dữ liệu theo hai mô hình kết nối (phải) và phi kết nối (trái). 

Một điều quan trọng, bạn cần linh động chú ý cách sử dụng các classes, constructors, methods... có nhiều cách gõ code để khai báo một lệnh nhưng chúng đều đúng. Vì đơn giản mỗi lần .NET nâng cấp thì bổ sung nhiều chức năng mới, đồng thời vẫn giữ các chức năng cũ
Và nếu bạn làm việc với Thread bất đồng bộ, thì việc debug sẽ khó khăn nếu code gặp vấn đề. Chưa quen có thể dùng các phương thức thường để debug dễ hơn

1. Sử Dụng Mô Hình Kết Nối (Connected)

(Video: Đang cập nhật... & Mã nguồn: Sẽ cập nhật cuối bài viết này...)
Says: Cách này trông có vẻ đơn giản hơn mô hình phi kết nối, nhưng có vài điểm bạn có thể cần biết. Dùng mã dưới đây để đồng bộ dữ liệu khi select row trên DataGridView và Controls. Ví dụ:

private void BindingData()
{
TxtName.DataBindings.Add("Text", datasourceName, "NameColumns", false, DataSourceUpdateMode.Never);
}

Để dễ dàng ta chọn DataTable đổ dữ liệu lên DataGridView. Tiếp tục nào...

Step by Step:
  • Khai báo 1 SqlConnection, xây dựng hàm đóng, mở kết nối.
  • Khai báo SqlCommand để gửi lệnh
  • Sử dụng SqlDataReader để đọc dữ liệu từ SqlCommand
  • Sử dụng Table, List hay bất cứ gì để lấy dữ liệu cuối cùng từ SqlDataReader
Các lớp cơ sở và giao diện xây dựng như sau:
  • Create database với 2 table như trên, và các store procedure đi kèm. Chỉ việc copy query và RUN
  • DAL: DataAccess.cs xây dựng các hàm kết nối, lấy dữ liệu, insert, update, delete. Bạn luôn phải mở kết nối, và có thể đóng lại sau khi đã lấy dữ liệu để giải phóng tài nguyên.
  • BLL: DepartmentBussinessLogic.cs, EmployeeBussinessLogic.cs gọi lại các hàm CRUD dưới DAL và truyền tham số phù hợp
  • UI: FormDepartment.cs, FormEmployee.cs, FormMain.cs bạn có thể tách ra dự án riêng và add thư viện dự án chứa các lớp cơ sở trên. Gọi các lớp BLL để sử dụng, nhớ khai báo chuỗi kết nối trong app.config (hoặc thiết lập cố định trong class DAL, không khuyến khích). Phần giao diện, nếu muốn chuyên nghiệp, có lẽ nên sử dụng các Component như DevExpress sẽ đẹp, hỗ trợ mạnh mẽ hơn.

2. Sử Mô Hình Phi Kết Nối (Disconnected)

(Video: Đang cập nhật... & Mã nguồn: Sẽ cập nhật cuối bài viết này...)
Says: Có điều lưu ý, về khái niệm kết nối và phi kết nối. Bản thân mô hình phi kết nối này nằm ở chỗ, bạn cần xây dựng một file dữ liệu local trên client như XML, JSON để chứa dữ liệu từ Server. Ngoài ra, các thao tác nghiệp vụ đều lưu tại client, khi yêu cầu thì đồng bộ xuống Database. Như vậy, cho dù mất kết nối mạng, công việc vẫn được tiến hành trên client, vì nó là file nên đóng mở app không mất dữ liệu. Trong demo, chỉ sử dụng bộ nhớ cache DataSet, như vậy thiếu phần lưu local (XML, JSON..) có thể được cập nhật sau.

Step by Step:
s

Created: 12/03/2016 - Editing
Source Code: Implementation for ADO.NET and Entity Framework (Winforms & WPF) 
Video Demo: ADO.NET With Connected Model - Winforms
Video Demo: ADO.NET With Disconnected Model - Winforms
Video Demo: Entity Framework With Database First Approach- WPF 
Video Demo: Entity Framework With Model First Approach - WPF
Video Demo: Entity Framework With Code First Approach - WPF

thumbnail Implementation for ADO.NET and Entity Framework

data:label.name author

premiumpng.com

Design Publisher

Download 0
No comments
Template in .PSD format

MR Laboratory License

Free for personal purpose use . More info


Buy Now This Template

No comments:

Post a Comment

Commets Download Photoshop Actions, Lightroom Presets, PSD Template, Mockups, Stocks, Vectors, Fonts. Download free

Newer Post Older Post Home

Copyright © 2021 MR Laboratory All rights reserved.

Setting