Thực hiện các tính năng CRUD với Entity Framework trong ứng dụng ASP.NET MVC

Trong bài viết trước, bạn đã tạo một ứng dụng MVC cho phép lưu trữ và hiển thị dữ liệu dùng Entity Framework và SQL Server Compact. Trong phần này bạn sẽ xem lại và tùy biến các câu lệnh cho phép xem, thêm, xóa, sửa dữ liệu mà trình hỗ trợ của MVC đã tự động tạo cho bạn trong các view và controller.

Ghi chú: Trong thực tế, người ta thường dùng mẫu thiết kế Repository để tạo lớp trừu tượng giữa controller và DAL. Để giữ cho bài viết được đơn giản, bạn sẽ không xây dựng một repository cho tới các bài viết sau trong cùng loạt bài này.

(CRUD: Create, Read, Update, Delete)

Continue reading “Thực hiện các tính năng CRUD với Entity Framework trong ứng dụng ASP.NET MVC”

Tạo một mô hình dữ liệu Entity Framework cho ứng dụng ASP.NET MVC

Ứng dụng web của trường đại học Contoso biểu diễn cách tạo ra một ứng dụng ASP.NET MVC dùng Entity Framework. Ứng dụng mẫu là website của trường đại học Contoso (trường đại học này chỉ là hư cấu – không có thật). Nó bao gồm các chức năng như đăng ký nhập học, tạo khóa học, và phân lớp cho giảng viên. Loại bài này sẽ hướng dẫn các bước để xây dựng nên ứng dụng Contoso University. Bạn có thể tải về ứng dụng hoàn chỉnh hoặc tạo mới bằng cách theo các bước hướng dẫn trong bài. Các ví dụ được trình bày bằng C#, mã ứng dụng để có thể tải về được viết bằng C# và VB. Nếu có câu hỏi nào không liên quan trực tiếp đến loại bài này, bạn có thể gửi lên ASP.NET Entity Framework forum hay Entity Framework and LINQ to Entities forum. Chúng tôi sẽ coi như bạn đã biết cách làm việc với ASP.NET MVC trong Visual Studio, nếu chưa, bạn có thể tham khảo basic ASP.NET MVC Tutorial. Nếu bạn định dùng WebForm, xem loại bài Getting Started with the Entity FrameworkContinuing with the Entity Framework. Trước khi bắt đầu, hãy kiểm tra và đảm bảo rằng các thành phần sau đã được cài đặt:

Continue reading “Tạo một mô hình dữ liệu Entity Framework cho ứng dụng ASP.NET MVC”

Từ khóa var

Bắt đầu từ C# 3.0, các biến khai thuộc bên trong các phương thức có thể được khai báo kiểu ngầm định bằng cách dùng từ khóa var. Một biến được khai báo bằng từ khóa này vẫn có kiểu cụ thể, chỉ khác là kiểu này được xác định tự động bởi trình dịch, hai câu khai báo sau là hoàn toàn tương đương:

var i = 10;
int i = 10;

Những ràng buộc sau được áp dụng khi một biến được khai báo bằng var:

  • Biến phải được khởi tạo ngay khi khai báo.
  • Câu lệnh khởi tạo phải là một biểu thức (tức phải có giá trị).
  • Biểu thức khởi tạo phải có một kiểu không phải kiểu null..
  • Câu lệnh khai báo không sử dụng cho việc khai báo nhiều biến đồng thời.
  • Câu lệnh khởi tạo không được phép tham chiếu lại chính biến được khai báo.

Các ví dụ sau là không hợp lệ:

var x; // Lỗi, không có câu lệnh khởi tạo 
var y = {1, 2, 3}; // Lỗi, câu lệnh khởi tạo không được phép là một tập hợp 
var z = null; // Lỗi, không được phép là kiểu null 
var u = x => x + 1; // Lỗi, biểu thức lambda không có kiểu 
var v = v++; // Lỗi, câu lệnh khởi tạo không được phép tham chiếu lại biến đang được khai báo


Chú ý:
Vì lý do tương thích, nếu bạn khai báo một biến bằng từ khóa var, và có một kiểu tên var đang tồn tại (in scope), kiểu var sẽ được dùng thay cho từ khóa var. Tuy nhiên trường hợp này có lẽ ít xảy ra vì tên kiểu var không đúng với quy ước đặt tên kiểu (chữ cái đầu mỗi từ phải là chữ hoa).

Các phát biểu for và using có thể dùng var, và biến được khai báo sẽ có cùng kiểu với biểu thức khởi tạo:

Ví dụ:

for (var i = 1; i <= 10; i++) //Biến i có kiểu int
using (var context = new MyDataContext()) //Biến context có kiểu MyDataContext

Ngược lại, nếu dùng var khi khai báo biến với vòng lặp foreach, biến này sẽ có kiểu của thành phần bên trong tập hợp được duyệt.

Ví dụ:

int[] numbers = { 1, 3, 5, 7, 9 }; foreach (var n in numbers) Console.WriteLine(n); //Biến n có kiểu int

Cũng như biểu thức lambda, bản thân var không phải là một thành phần của LINQ, tuy nhiên nó hỗ trợ LINQ trong việc giúp người dùng khai báo các câu truy vấn một cách đơn giản hơn.

Đào Hải Nam

Extension Methods

Extension method (phương thức mở rộng) cho phép bạn “viết thêm” các phương thức vào một kiểu có sẵn mà không cần tạo các lớp thừa kế, dịch lại hay sửa đổi kiểu dữ liệu sẵn có. Phương thức mở rộng là một dạng đặc biệt của phương thức tĩnh (static), nhưng chúng được gọi giống như là một phương thức thông thường trên kiểu được mở rộng. Với mã lệnh để gọi các phương thức này, khi được viết bằng C# và VB, không có gì khác nhau giữa việc gọi một extension method và các phương thức thực sự được định nghĩa trong kiểu dữ liệu đó.

Dùng biểu thức LINQ tùy biến với <asp:LinqDatasource> (LINQ to SQL phần 9)

Vài tuần trước tôi bắt đầu viết loạt bài về LINQ to SQL. LINQ to SQL là một bộ khung (framework) có sẵn cho O/RM (object relational mapping) trong .NET 3.5, nó cho phép bạn dễ dàng mô hình hóa các CSDL quan hệ dùng các lớp .NET. Bạn có thể dùng các biểu thức LINQ để truy vấn CSDL, cũng như có thể cập nhật/thêm/xóa dữ liệu từ đó.

Dưới đây là 8 phần đầu tiên của loạt bài này:

Continue reading “Dùng biểu thức LINQ tùy biến với <asp:LinqDatasource> (LINQ to SQL phần 9)”

Thực thi các biểu thức SQL tùy biến (LINQ to SQL phần 8)

Vài tuần trước tôi bắt đầu viết loạt bài về LINQ to SQL. LINQ to SQL là một bộ khung (framework) có sẵn cho O/RM (object relational mapping) trong .NET 3.5, nó cho phép bạn dễ dàng mô hình hóa các CSDL quan hệ dùng các lớp .NET. Bạn có thể dùng các biểu thức LINQ để truy vấn CSDL, cũng như có thể cập nhật/thêm/xóa dữ liệu từ đó.

Dưới đây là 7 phần đầu tiên của loạt bài này:

Continue reading “Thực thi các biểu thức SQL tùy biến (LINQ to SQL phần 8)”

Lỗi “Name ‘__o’ is not declared” trong trang ASP.NET

Khi viết ASP.NET, bạn có thể gặp trường hợp sau:

– Khi dịch VS sẽ báo lỗi “Name ‘__o’ is not declared”  ở những dòng có dạng output (<%=”my value”%>), mặc dù bạn không có bất kỳ biến nào có tên __o.

– Những dòng lỗi này sẽ bị gạch chân trong trình soạn thảo.

– Tuy nhiên khi chạy chương trình vẫn bình thường.

Continue reading “Lỗi “Name ‘__o’ is not declared” trong trang ASP.NET”

ASP.NET MVC Release Candidate 2 ra mắt

Bản ASP.NET MVC RC2 đã được giới thiệu hôm 03/03, trong bài này tôi sẽ nói sơ qua những thay đổi của phiên bản này so với phiên bản trước.

Có 3 thay đổi chính bao gồm.

  • Bản cài đặt yêu cầu .NET 3.5 SP1
  • Vẫn có thể triển khai bằng cách đưa các thư viện vào trong thư mục bin nếu dùng .NET 3.5 (không có SP1): khi cài ASP.NET MVC, các thư viện System.Web.Mvc, System.Web.Routing, System.Web.Abstractions sẽ được thêm vào GAC trên máy cài đặt. Điều này sẽ không gây ra vấn đề gì nếu bạn đang cài đặt và chạy ASP.NET MVC trên cùng một máy. Tuy nhiên, nếu bạn định triển khai lên một máy khác có thể sẽ gặp trục trặc nếu máy đó chưa được cài sẵn ASP.NET MVC. Bạn có thể giải quyết vấn đề bằng cách đưa các thư viện này vào thư mục bin của ứng dụng. Nếu dùng cách này, máy chủ của bạn chỉ cần .NET 3.5 (không có SP1) vẫn có thể chạy được.
  • Chế độ chỉ cài đặt cho server: Trong bản cài đặt này, bạn có thể cài ASP.NET MVC lên máy tính không có Visual Studio, trong trường hợp đó, bộ cài đặt sẽ không cài đặt các template cho VS, các thư viện sẽ vẫn được cài đặt vào GAC và các native image vẫn được tạo.

Bạn có thể tải về bản ASP.NET MVC RC2 tại đây.

Mã nguồn có thể tải về tại đây.

Cập nhật cơ sở dữ liệu (LINQ to SQL phần 4)

Từ vài tuần trước, tôi đã bắt đầu một loạt bài nói về LINQ to SQL. LINQ to SQL là một O/RM có sẵn trong bản .NET Framework 3.5, và nó cho phép bạn dễ dàng mô hình hóa các CSDL cùng các lớp .NET. Bạn có thể dùng các biểu thức LINQ để truy vấn CSDL, cũng như để thêm/xóa/sửa dữ liệu.

Dưới đây là 3 bài đầu tiên trong loạt bài này:

Trong bài hôm nay, tôi sẽ nói rõ hơn về cách chúng ta dùng CSDL đã được mô hình hóa trước đây, và dùng nó để cập nhật, chỉnh sửa và xóa dữ liệu. Tôi cũng sẽ cho các bạn thấy các chúng ta có thể thêm các quy tắc (business rule – sau này trở đi tôi sẽ để nguyên từ business rule, vì từ này rõ nghĩa hơn) và tùy biến cách xác thực tính hợp lệ của dữ liệu. Continue reading “Cập nhật cơ sở dữ liệu (LINQ to SQL phần 4)”