Tạo chuỗi kết nối và làm việc với Sql Server Compact

Một phần của tài liệu Giáo trình asp net MVC 3 (Trang 65 - 83)

Class SanPhamDBContext chúng ta đã tạo xử lí các tác vụ kết nối đến database và map đối tượng SanPham đến các mẩu tin trong database. Một câu hỏi

mà chúng ta có thể đặt ra, suy nghĩ, là làm thế nào để kết nối đến database. Chúng ta sẽ làm điều đó bằng cách thêm thông tin kết nối trong tập tin web.config của ứng dụng.

Mở tập tin Web.config trong thư mục gốc của ứng dụng (chọn tập tin Web.config như trong hình bên dưới).

Sau đây là một phần của tập tin Web.config với chuỗi kết nối đã được thêm vào:

<connectionStrings>

<addname="SanPhamDBContext"

connectionString="Data Source=|DataDirectory|ShoppingOnline.sdf"

providerName="System.Data.SqlServerCe.4.0"/>

<addname="ApplicationServices"

connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;

AttachDBFilename=|DataDirectory|ShoppingOnline.mdf;User Instance=true"

providerName="System.Data.SqlClient" />

</connectionStrings>

Phần trên gồm một ít mã và xml là mọi thứ mà chúng ta cần phải viết để dại diện và lưu trữ dữ liệu sản phẩm trong trong database.

Phần tiếp theo, chũng ta sẽ xây dựng mới một class SanPhamController mà chúng ta có thể sử dụng để hiển thị dữ liệu của SanPham và cho phép người dùng tạo mới danh sách các sản phẩm.

Trong phần này chúng ta sẽ tạo mới class SanPhamController và viết code để lấy dữ liệu sản phẩm và hiển thị lên trình duyệt sử dụng view template. Phải đảm bảo rằng ứng dụng của chúng ta được built trước khi xử lí.

Click phải chuột trên thư mục Controllers và tạo mới một controller SanPhamController. Lựa chọn các tùy chọn:

Click Add. Visual Web Developer tạo ra các tập tin và thư mục sau:

Một tập tin SanPhamContrller.cs trong thư mục Controllers của project Một thư mục SanPham trong thư mục Views của project Create.cshtml, Delete.cshtml,Detail.cshtm, Index.cshtml trong thư mục mới Views\SanPham\ :

ASP.NET MVC3 scaffolding tự động tạo các phương thức action CRUD (create, read, update, delete) và các view cho chúng ta. Chúng ta có ứng dụng web đầy đủ các chức năng cho phép chúng ta tạo danh sách, chỉnh sửa và xóa các sản phẩm

Chạy ứng dụng trên trình duyệt và browse đến controller bằng cách thêm /SanPham vào URL. Bởi vì ứng dụng sẽ dựa vào đường dẫn mặc định (định nghĩa trong tập tin Global.asax), trình duyệt sẽ yêu cầu http://localhost:xxxxx/ SanPham sẽ đi đến phương thức mặc định là Index của controller SanPham.

Trong trường hợp khác, trình duyệt yêu cầu http://xxxxx/SanPham kết quả cũng tương tự với http://localhost:xxxxx/SanPham/Index. kết quả trả về là danh sách rỗng, bởi vì chúng ta chưa thêm vào đó bất cứ thứ gì.

Tạo một sản phẩm

chọn Create New link. Nhập vào chi tiết một sản phẩm sau đó click nút Create.

Sau đó nhập các thông tin cần thiết cho sản phẩm

Click bút Create form sẽ được post lên server, nơi mà thông tin các sản phẩm được lưu trữ trong database.

Sau đó chúng ta có thể chuyển trực tiếp đến /SanPham URL, nơi mà chúng ta có thể thấy các sản phẩm mới tạo trong danh sách.

Thêm chi tiết cho một vài sản phẩm và hãy thử Edit, Detail, và Delete với tất cả các hàm.

Kết quả:

Sửa thông tin sản phẩm:

Ta Click vào Edit. Các thông tin của sản phẩm với mã đó được load lại một cách tự động. Ta chỉ cần sửa những gì ta muốn mà thôi.

Giả sử ta sửa đơn giá là 999999. Sau đó bấm Save lại và kết quả:

Xem chi tiết thông tin một sản phẩm:

Bấm vào Details để xem thông tin chi tiết của một sản phẩm

Xóa một sản phẩm đi:

Bấm vào Delete

Trình duyệt sẽ hỏi lại xem ta có thực sự muốn xóa sản phẩm với những thông tin này hay không. Nếu đồng ý ta bấm Delete. Sau khi xóa sẽ tự động trở về trang Index và ta sẽ thấy những sản phẩm có trong bảng sản phẩm:

Các đoạn code tự động sinh ra:

Mở tập tin Controllers\SanPhamController.cs và kiểm tra phương thức Index đã được tạo. Phương thức Index hiển thị bên dưới là một phần của SanPham controller.

public class SanPhamController : Controller

{

private SanPham.SanPhamDBContext db = new

SanPham.SanPhamDBContext();

//

// GET: /SanPham/

public ViewResult Index()

{

return View(db.SanPhams.ToList());

}

Dòng sau đây là tạo một đối tương SanPham database context, như đã mô tả trước đó. Chúng ta có thể sử dụng SanPham database context để truy vấn, sửa chỉnh, và xóa các sản phẩm.

private SanPham.SanPhamDBContext db = new SanPham.SanPhamDBContext();

Một yêu cầu gửi đến controller SanPham trả về tất cả các dòng trong bảng SanPham của database SanPham và sau đó sẽ chuyển kết quả đến view Index.

Strongly Typed Models và từ khóa @model

Ở Phần trước, chúng ta đã thấy cách truyền dữ liệu từ controller đến view template sử dụng đối tượng ViewBag. ViewBag là một đối tượng động hỗ trợ cách thuận tiện để truyền thông tin đến view.

ASP.NET MVC ngoài ra còn cung cấp khả năng để truyền dữ liệu strongly typed hoặc đối tượng đến view template. Phương pháp tiếp cận strongly typed hỗ

trợ kiểm tra code tốt hơn tại thời điểm biện dịch và IntelliSense phong phú hơn trong Visual Web Developer editor. Chúng ta sẽ sử dụng phương pháp tiếp cận này với class SanPhamController và Index.cshtml view template.

Chú ý code tạo ra đối tượng List như thế nào khi nó gọi phương thức View trong phương thức Index. Sau đó code này sẽ truyền list SanPham từ controller đến view:

publicViewResult Index() {

return View(db.SanPhams.ToList());

}

Bằng cách include @model vào phía trên của tập tin view template, chúng ta có thể chỉ định loại đối tượng mà view mong đợi. Khi chúng ta tạo SanPham controller, Visual Web Developer tự động include @model vào phía trên đầu của tập tin Index.cshtml:

@model cho phép chúng ta truy suất đến list của SanPham mà controller đã truyền tới view bằng cách sử dụng một đối tượng Model đó là strongly typed.

Ví dụ, trong Index.cshtml template, code sẽ lặp qua list các SanPham sử dụng câu lệnh lặp foreach trên mỗi đối tượng strongly typed Model:

@foreach (var item in Model) {

<tr>

<td>

@Html.DisplayFor(modelItem => item.masp)

</td>

<td>

@Html.DisplayFor(modelItem => item.tensp)

</td>

<td>

@Html.DisplayFor(modelItem => item.mancc)

</td>

<td>

@Html.DisplayFor(modelItem => item.madongsp)

</td>

<td>

@Html.DisplayFor(modelItem => item.mota)

</td>

<td>

@Html.DisplayFor(modelItem => item.anh)

</td>

<td>

@Html.DisplayFor(modelItem => item.thongtinthem)

</td>

<td>

@Html.DisplayFor(modelItem => item.ngaynhaphang)

</td>

<td>

@Html.DisplayFor(modelItem => item.dongia)

</td>

<td>

@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |

@Html.ActionLink("Details", "Details", new { id=item.ID }) | @Html.ActionLink("Delete", "Delete", new { id=item.ID }) </td>

</tr>

}

Bởi vì đối tường Model là một strongly typed (như một đối tượng IEnumerable), mỗi đối tượng item trong lần lặp là một dạng như SanPham. Một lợi ích khác, đó là chúng ta có thể kiểm tra code trong thời gian biên dịch với sự hỗ trợ đầy đủ của IntelliSense trong code editor:

Làm việc với SQL Server Compact

Entity Framework Code First tìm chuỗi kết nối database được cung cấp để kết nối đến database SanPham mà nó chưa tồn tại, vì thế Code First tạo ra database tự động. Chúng ta có thể kiểm tra database đã được tạo bằng cách xem trong thư mục App_Data.

Nếu không thấy NguyenIchHoan.Models.SanPham+SanPhamDBContext.mdf thì click vào Show All Files trong Solution Explorer toolbar, click Refesh, và sau đó mở rộng thư mục App_Data.

Double click NguyenIchHoan.Models.SanPham+SanPhamDBContext.mdf để mở Server Explorer. Sau đó mở rộng thư mục table để xem các bản đã được tạo trong database.

Có hai bảng là SanPhamsvà EdmMetadata. bảng EdmMetadata được sử dụng bởi Entity Framework để xác định khi nào model và database được đồng bộ.

Click phải vào table SanPhams chọn Show Table Data để xem dữ liệu chúng ta đã tạo.

Kết quả:

Click phải vào table SanPhams và chọn Open Table Definition để sửa cấu trúc bảng nếu cần

Chú ý là lược đồ của bảng SanPhams được map với class SanPham mà chúng ta đã tạo trước đó. EF Code First đã tự động tạo lược đồ này cho chúng ta dựa trên class SanPham. Khi bạn đã hoàn thành, hãy đóng kết nối lại (Nếu không đóng kết nối, có thể sẽ gặp lỗi trong lần run project kế tiếp).

Hiện tại chúng ta đã có database và một list page đơn giản để hiển thị nội dung từ database. phần tiếp theo, chúng ta sẽ kiểm tra tiếp phần còn lại của scaffolded và thêm vào phương thức SearchIndex và một SearchIndex view cho phép chúng ta tìm kiếm các sản phẩm trong database.

Một phần của tài liệu Giáo trình asp net MVC 3 (Trang 65 - 83)

Tải bản đầy đủ (PDF)

(120 trang)