Sunday 2 December 2018

Code-first là gì? Có nên học Code-first?

1.Code-first

Theo mình hiểu thì code-first là viết các class Model bằng cpde C#, Generate Database từ class Model.

2.Code-first là gì?

Code first là phương pháp tạo các class Model sau đó phát sinh ra database. Đây là cách thức phát triển ứng dụng nhanh khi chưa có database. Bằng cách sử dụng code first bạn cũng có thể tạo dữ liệu ban đầu cho database của mình. Sau đây mình sẽ hướng dẫn cách sử dụng EF code first, sẽ rất đơn giản thôi.

3.Áp dụng Code-first?

- Các bạn làm theo mình nhé ^^, đầu tiên chúng ta tạo 1 project:

b1: Các bạn chọn File->new->project sau đó hiện ra bảng như này rồi các bạn điền tên project vào nhé


b2: Khi bạn nhấn Ok thì sẽ hiện ra bảng như sau: Các bạn làm theo hình nhé ^^


rồi các bạn nhấn tiếp Ok, rồi bây giờ chúng ta đã tạo xong project rồi.

- Chúng ta là làm code first nên sẽ thao tác từ model đến database:

Nên chúng ta phải cài Entity-framework, các bạn thao tác giống mình nhé: Ở solution explorer, bạn click chuột phải vài References->Manager Nuget Packages-> rồi nó hiện ra 1 cái bảng để cho bạn có thể thêm thư viện mà Microsoft hỗ trợ, các bạn nhìn hình minh họa nhé:


các bạn chọn Install rồi đợi trong vài giây, bài của mình do cài rồi nên nó có chữ Uninstall.

Tiếp theo Các bạn vào Web.config vào thêm đoạn code này cho mình nhóe!! Cái đoạn code mình bôi đậm nhé!! 


đây mình sẽ giải thích từng dòng code cho các bạn:

+ Trong thẻ <add /> thuột tính name là trỏ đến một cái class để giao tiếp giữa code và database, trong class đó sử dụng DbContext để giao tiếp giữa code và database.
+ Tiếp theo là thuộc tính connectionString giá trị Data Source=DESKTOP-L2AT6ON là tên máy chủ của bạn trong SQL Server manager studio còn giá trị Catalog=AppProducts là tên database mà bạn muốn đặt, còn mình thì đặt là AppProducts

Tiếp theo đây các bạn Click chuột phải vào thư mục model rồi chọn Add->class.cs  để tạo ra một class. Rồi các bạn thêm các trường như sau: các trường này cũng giống như các cột trong Database ở Sql Server Manager Studio của bạn.


Bài của mình thì mình có 6 trường, còn [Key] ở trên Id Annotation, mà Annotation thì mình có hướng dẫn rồi các bạn có thể xem tại đây. 
Như vây là xong phần code-first rồi đấy, bây giờ các bạn có thể bật Sql Server Manager StudioRefresh lại sẽ thấy database của bạn có các trường tương tự như class ở trong thư mục model .

Các bạn có thể tham khảo phần CRUD mình làm bằng code-first ở đây nhé: GIT.

4.Tổng hợp Code-first

Như vậy là chúng ta đã xong phần code-first. À chắc hẳn khi bạn code phần model như bây giờ bạn lại muốn thêm một trường nào đó thì bạn sẽ phải update lại database.
Hướng dẫn khi thêm trường trong class model: 
b1: Các bạn làm như hình để nó hiển thị ra một cửa sổ console để thao tác nhé


b2: Sau đó bạn gõ các lệnh sau: 
+ enable-migrations
+ create-migration tên migration(Bạn muốn đặt như nào cũng được nhé)
+ update-database
Rồi các bạn vào database kiểm tra, nó sẽ tự động thêm vào database của các bạn

5.Phân tích Code-first

-Ưunhược điểm của code-first:
+Ưu điểmRất phổ biến (vì các lập trình viên thường không thích thiết kế DB, nhưng thích thiết kế class)
Kiểm soát hoàn toàn code model, thêm xóa sửa thuộc tính vô cùng dễ dàng
Không phải nặng đầu suy nghĩ về DB. Đối với cách tiếp cận này, DB chỉ là cái “cục” data, lôi ra xài thôi
Có thể version control Database.
+Nhược điểm: Các thay đổi cấu trúc trực tiếp trên DB sẽ mất
Khó kiểm soát những column sẽ tạo trên Db
Hơi khó khi kết hợp với Db có sẵn.

6.Đánh giá Code-first

Theo mình code-first sẽ giúp chúng ta nắm và hiểu được cơ bản về quá trình generate dữ liệu, sẽ giúp cho người mới học có thể dễ dàng tiếp cận. Đặc biệt nó giúp cho ta chủ động hơn trong việc thêm sửa hay xóa model


Lambda-Expressions là gì?

1.Lambda Expressions

Có thể nói so với anonymous method, lambda expression được coi là một sự cái tiến đáng giá từ phiên bản C# 2.0 lên C# 3.0. Khi dùng anonymous method, bạn có thể tạo các hàm in-line nhằm hạn chế việc khai báo các hàm riêng lẻ không cần thiết, giúp mã lệnh ngắn gọn hơn. Nay với lambda expression, bạn có thể viết ngắn gọn và dễ dàng hơn nhờ việc cung cấp toán tử và cú pháp mới, đồng thời thể hiện sự “thông minh” của compiler bằng cách tự nhận diện kiểu của dữ liệu. Ngoài ra, đây còn là kĩ thuật để tạo ra các kiểu expression tree mà ta sẽ bàn tới khi có dịp.


2.Lambda Expressions là gì?

Lamda Expression là một hàm không có tên (unamed function) với các tham số (parameters) và nội dung thực thi (body). Nội dung thực thi của Lamda expression có thể là 1 khối lệnh hoặc 1 biểu thức. Dấu “->” tách biệt các tham số và nội dung thực thi.


3.Áp dụng Lambda Expressions?

Sau đây mình cho các bạn một vài ví dụ về cách viết Lambda Expressions:
//1. Có thể bỏ qua kiểu dữ liệu của parameter truyền vào
(string qua) => {Console.WriteLine("Tặng quà: " + qua);}
(qua) => {Console.WriteLine("Tặng quà: " + qua);}
//2. Nếu không có parameter, bỏ dấu () trống
() => {Console.WriteLine("Hello");}
//3. Nếu chỉ có 1 parameter, có thể bỏ luôn dấu ()
(x) => {Console.WriteLine("Hello " + x);}
x => {Console.WriteLine("Hello " + x);}
//4. Nếu có nhiều parameter, ngăn cách bằng dấu phẩy
(x, y) => {Console.WriteLine("Hello " + x + y);}
//5. Nếu anonymous function chỉ có 1 câu lệnh, có thể bỏ dấu {}
x => { Console.WriteLine("Hello " + x); }
x => Console.WriteLine("Hello " + x)
//6. Nếu chỉ return 1 giá trị, có thể bỏ chữ return.
//4 lambda expression sau tương đương nhau
(x) => { return x > 4; }
x => { return x > 4; }
x => return x > 4
x => x > 4

Còn đây là cách viết rút gọn của 1 lambda expressions:



Qua các ví dụ ở trên thì các bạn cũng khá hình dung về lambda expressions
rồi đúng không nào. Để có thể hiểu rõ thì chỉ có cách là các bạn luyện tập
nhiều nhiều và thật nhiều thôi ^^

4.Tổng hợp về Lambda Expressions?

Lambda expression là một sự cải tiến hơn nữa so với anonymous method. Chúng ta có thể viết code ngắn gọn hơn nữa so với anonymous method Trong C#, toán tử lambda là =>

5.Phân tích Lambda Expressions?

Lambda Expression đã được cải tiến tốt hơn so với dùng Anonymous method
Cụ thể đã được cải tiến từ Delegate -> Anonymous method ->Lambda expression.
  • Lambdas expression được sử dụng rộng rãi trong việc xây dựng Expression Tress.
  • Các ngoặc () là tùy chọn chỉ khi lambda có một tham số đầu vào. Hai hoặc nhiều thông số đầu vào được phân cách bằng dấu phẩy trong dấu ngoặc đơn.

6.Đánh giá Lambda Expressions?

Theo mình thì lambda expression một sự cải tiến hay nâng cấp tốt. Nó giúp chúng ta viết ngắn code nhưng vẫn dễ hiểu, và dễ học.






LinQ là gì?

1.Giới thiệu về Linq

Xử lý thông tin hay dữ liệu là nhiệm vụ quan trọng nhất của bất kỳ phần mềm nào và một trong những trở ngịa chính mà các nhà phát triển hiện nay phải đối mặt là khác biệt giưa ngôn ngữ lập trinh hướng đối tượng và ngôn ngữ truy vấn dữ liệu, vấn đề càng phức tạp hơn với sự xuất hiện của XML (Extensible Markup Language - ngôn ngữ đánh dấu mở rộng)

2.LinQ là gì?

LinQ là một cách để truy vấn một tập hợp các dữ liệu bằng cách sử dụng các phuơng thức mở rộng (extension methods). những extension methods chỉ có thể truy cập bằng cách thêm using System.Linq 

3.Áp dụng với linq

Với Linq các bạn có thể viết trực tiếp tại controller luôn, nó sẽ giúp cho ta về sự minh bạch trong code.
Việc sử dụng LinQ sẽ dễ dàng hơn với những bạn đã từng học SQL. LinQ có 2 cách sử dụng là Query Syntaxvà Method Syntax. Sau đây mình sẽ hướng dẫn sử dụng LinQ với một số ví dụ đơn giản:


Đoạn code được bôi đen kia cho thấy chúng ta đang truy vấn đến bản Products và sắp xếp Name theo thứ tự tăng dần theo ascII.
Đó chỉ là một câu truy vấn rất đơn giản, để có thể làm việc với linq các bạn nên xem, và học về sql bởi vì câu lệnh sql cũng tương tự Linq mà thôi. Nên ở đây tôi chỉ có ví dụ đơn giản như vậy để cho các bạn hình dung được linq là như thế nào.

Các bạn có thể tham khảo code ở GIT của mình --

4.Tổng hợp LinQ

Hiện tại, LinQ hỗ trợ các công nghệ sau:


5.Phân tích LinQ

LINQ là thư viện cho phép truy vấn trên nhiều kiểu dữ liệu khác nhau: Object collections, XML, LINQ to SQL (truy vấn cơ sở dữ liệu MS-SQL), LINQ to Dataset, LINQ to Entity (ADO.net Entity Framework), LINQ to SharePoint, LINQ to XML, LINQ to nHIbernate, LINQ to XYZ, LINQ to Azure SQL Service….
Dù là một công cụ khá hay trên nền tảng .NET, LINQ to SQL vẫn có hạn chế như:
  • Chỉ thao tác duy nhất với hệ quản trị cơ sở dữ liệu SQL Server.
  • Chỉ có thể tự động tạo Data Model từ Database chứ không thể tạo Database từ Data Model.
  • Chỉ cho phép ánh xạ 1:1 giữa các Table trong Database với các lớp Data Model (tức là không thể tạo 1 Data Model là kết quả kết hợp từ 2 bảng dữ liệu trở lên).

6.Đánh giá về LinQ

Theo mình nói chung và các Developer trên toàn thế giới nói riêng thì LinQ là 1 công nghệ rất mạnh trong .NET Framework, nhờ LINQ thì việc truy vấn dữ liệu từ bất cứ nguồn dữ liệu nào đều dễ dàng và thống nhất 1 cú pháp chung.





Database first là gì? Có nên sử dụng?

1. Database first

Đây là mô hình truyền thống và lâu đời nhất mà ai cũng quen, đó chính là tạo database trước sau đó sẽ tạo bằng tay hoặc sinh tự động các class tương ứng với mỗi thực thể trong database
Ưu điểm

  • Dễ dàng, quen thuộc với hầu hết tất cả mọi người
  • Code tự động sinh ra dựa vào các bảng trong database
  • Phù hợp cho các ứng dụng lớn
  • Không quản lý được version của database
  • Bất tiện khi làm việc theo nhóm, cả nhóm thường phải chung 1 server để database thống nhất cho cả team

Nhược điểm

  • Không quản lý được version của database
  • Bất tiện khi làm việc theo nhóm, cả nhóm thường phải chung 1 server để database thống nhất cho cả team

2.Database First là gì?

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.

3.Áp dụng

Sau đây mình hướng dẫn các bạn tạo database first: Sql server manager của mình là bản 2017 nhé.

Bước 1: Các ban mở sql server manager lên,click chuột phải vào Database chọn New Database rồi nhâp tên database bạn muốn đặt, đồng thời trong Visual studio bạn tạo luôn 1 project nhé.
    

Ảnh minh họa ( 1.1 )
Bước 2: Sau đó các bạn click chuột phải vào database của mình rồi chuột phải vào Tables
 rồi chọn New Tables sau đó các bạn nhập các trường thích hợp cho bảng của mình rồi nhấn tổ hợp phím CTRL + S  để lưu rồi bạn nhập tên bảng.

Ảnh minh họa ( 1.2 ) 
         
Bước 3: Các bạn vào Visual studio click chuột phải vào project rồi chọn Add -> New Item -> Visual C# -> Data rồi chọn ADO.NET Entity Data Model và đặt tên cho nó rồi bạn nhấn Add
 để thêm mới, sau đó sẽ hiện ra bảng như hình ở dưới



Ảnh minh họa (1.3)
rồi các bạn nhân Next -> rồi bạn Click vào New Connection sẽ hiện ra bảng sau:


Ảnh minh họa (1.4)

Rồi ở ô refresh bạn điền tên sql của mình vào đó rồi nhấn Ok -> sau đó bạn nhập tên entity rồi nhấn Next 2 lần


Ảnh minh họa (1.5)

sau đó bạn tích vào Tables rồi đặt tên Model NameSpace rồi nhấn Finish



Ảnh minh họa ( 1.6 )


Như vậy là xong phần tạo, bây giờ các bạn có thể tạo controller và code rồi đấy ^^




Các bạn có thể tham khảo thêm ở đây GIT

4.Phân tích Database-First

Sau đây tôi sẽ cho các bạn biết về ưu nhược điểm của database-first

Ưu Điểm.
  • Dễ dàng, quen thuộc với hầu hết tất cả mọi người
  • Code tự động sinh ra dựa vào các bảng trong database
  • Phù hợp cho các ứng dụng lớn.


Nhược điểm.
  • Không quản lý được version của database
  • Bất tiện khi làm việc theo nhóm, cả nhóm thường phải chung 1 server để database thống nhất cho cả team

5.Đánh giá Database-First


Như vậy qua ví dụ thì mình rút ra được bài học: Database First là một mô hình tuyệt vời, giúp chúng ta tối giản lượng công việc lớn khi tạo database sẽ giúp cho  project của ta tạo ra một Model với đầy đủ tính năng.