Aspx.net / MVC — August 9, 2016 at 2:46 am

Học tốt MVC : Chương 4 Xây dựng Model – cấu trúc dữ liệu ứng dụng tin tức(P2)

by

Hôm trước chúng ta đã học về xây dựng cơ sỡ dữ liệu trên model. Hôm nay, chúng ta đi vào xây dựng nguyên một cấu trúc dữ liệu hoàn hảo nhất. Nhằm mục đích giúp khách hàng có thể tìm kiếm những sản phẩm hay các loại sản phẩm của mình một cách nhanh nhất và tối ưu hiệu quả.

1. Khởi tạo dữ liệu mặc định

– Chúng ta có thể tạo sẵn dữ liệu mặc định để test , hoặc tạo các dữ liệu hệ thống như tài khoản đăng nhập …

– Để làm điều này ta làm 2 bước đó là : Tạo mới lớp chứa dữ liệu mặc định sau đó đăng ký dữ liệu mặc định trong file global

Tạo dữ liệu mặc định

– Tạo mới lớp DefaultData.cs trong thư mục Model theo hình sau :

image16 image17

Mã lớp DefaultData như sau :

Tạo danh sách User :

// Tên đăng nhập admin , pass : 123456 ( tương ứng với mã MD5 là e10adc3949ba59abbe56e057f20f883e

new List<User> {

new User{ UserName=”admin”,Password=”e10adc3949ba59abbe56e057f20f883e”}

}.ForEach(m=>context.Users.Add(m));

– Ta lưu mật khẩu xuống CSDL , đồng thời mã hóa mật khẩu .Tránh trường hợp mở trực tiếp CSDL để xem mật khẩu .

– Khi đăng nhập ta sẽ sẽ hóa mật khẩu đăng nhập và so sánh chuỗi mã hóa đăng nhập với chuỗi mã hóa lưu xuống CSDL

Tạo danh sách Category ( loại sản phẩm )

new List<Category> {

new Category { CategoryID=1,CategoryName=”Category 1″},

new Category { CategoryID=2,CategoryName=”Category 2″},

new Category { CategoryID=3,CategoryName=”Category 3″}

}.ForEach(m => context.Categorys.Add(m));

– Tạo danh sách Product ( sản phẩm) :

  // ở đây có 1 file ảnh trong thư mục : Content/Image/System/ProductImage.gif

new List<Product> {

new Product {ProductID=1, ProductName =”San Pham 1″,CategoryID=1,Price=100000,Image=”/Content/Image/System/ProductImage.gif”,ShortDescription=”Short Description 1″,Description=”Mo Ta San Pham 1″},

new Product {ProductID=2,ProductName =”San Pham 2″,CategoryID=1,Price=100000,Image=”/Content/Image/System/ProductImage.gif”,ShortDescription=”Short Description 2″,Description=”Mo Ta San Pham 2″},

new Product {ProductID=3,ProductName =”San Pham 3″,CategoryID=1,Price=100000,Image=”/Content/Image/System/ProductImage.gif”,ShortDescription=”Short Description 3″,Description=”Mo Ta San Pham 3″},

new Product {ProductID=4,ProductName =”San Pham 4″,CategoryID=2,Price=100000,Image=”/Content/Image/System/ProductImage.gif”,ShortDescription=”Short Description 4″,Description=”Mo Ta San Pham 4″},

new Product {ProductID=5,ProductName =”San Pham 5″,CategoryID=2,Price=100000,Image=”/Content/Image/System/ProductImage.gif”,ShortDescription=”Short Description 5″,Description=”Mo Ta San Pham 5″}

}.ForEach(m => context.Products.Add(m));

– Ở đây có 1 file ảnh demo lưu trong thư mục /Content/Image/System/ProductImage.gif

Các bạn có thể thay bằng ảnh bất kỳ

Tạo danh sách đơn hàng ( Order )

new List<Order>

{

new Order { OrderID=1,Customer=”Customer 1″,Email=”billsangvn@gmail.com”,Phone=”0985359218″,Address=”Hà Nội”,Active=false},

new Order {OrderID=2,Customer=”Customer 2″,Email=”billsangvn@gmail.com”,Phone=”0985359218″,Address=”Hà Nội”,Active=false},

new Order {OrderID=3,Customer=”Customer 3″,Email=”billsangvn@gmail.com”,Phone=”0985359218″,Address=”Hà Nội”,Active=false}

}.ForEach(m => context.Orders.Add(m));

Tạo danh sách chi tiết đơn hàng ( OrderDetails )

new List<OrderDetail>

{

new OrderDetail {OrderID=1,ProductID =1, Quantity =1},

new OrderDetail {OrderID=1,ProductID =1, Quantity =1},

new OrderDetail {OrderID=2,ProductID =2, Quantity =1},

new OrderDetail {OrderID=2,ProductID =2, Quantity =1},

new OrderDetail {OrderID=3,ProductID =3, Quantity =1},

new OrderDetail {OrderID=3,ProductID =3, Quantity =1}

}.ForEach(m => context.OrderDetails.Add(m));

– Cấu trúc toàn bộ lớp DefaultData như sau :

using System.Collections.Generic;

using System.Data.Entity;

 

namespace ProductMvc.Models

{

public class DefaultData : DropCreateDatabaseIfModelChanges<VinaEntity>

{

protected override void Seed(VinaEntity context)

{

#region Tạo dữ liệu User quản trị ( hỗ trợ mã hóa mật khẩu MD5)

// Tên đăng nhập admin , pass : 123456 ( tương ứng với mã MD5 là e10adc3949ba59abbe56e057f20f883e

new List<User> {

new User{ UserName=”admin”,Password=”e10adc3949ba59abbe56e057f20f883e”}

}.ForEach(m => context.Users.Add(m));

#endregion

#region Tạo danh sách loại sản phẩm ( category)

new List<Category> {

new Category { CategoryID=1,CategoryName=”Category 1″},

new Category { CategoryID=2,CategoryName=”Category 2″},

new Category { CategoryID=3,CategoryName=”Category 3″}

}.ForEach(m => context.Categorys.Add(m));

#endregion

#region danh sách Product

// ở đây có 1 file ảnh trong thư mục : Content/Image/System/ProductImage.gif

new List<Product> {

new Product {ProductID=1, ProductName =”San Pham 1″,CategoryID=1,Price=100000,Image=”/Content/Image/System/ProductImage.gif”,ShortDescription=”Short Description 1″,Description=”Mo Ta San Pham 1″},

new Product {ProductID=2,ProductName =”San Pham 2″,CategoryID=1,Price=100000,Image=”/Content/Image/System/ProductImage.gif”,ShortDescription=”Short Description 2″,Description=”Mo Ta San Pham 2″},

new Product {ProductID=3,ProductName =”San Pham 3″,CategoryID=1,Price=100000,Image=”/Content/Image/System/ProductImage.gif”,ShortDescription=”Short Description 3″,Description=”Mo Ta San Pham 3″},

new Product {ProductID=4,ProductName =”San Pham 4″,CategoryID=2,Price=100000,Image=”/Content/Image/System/ProductImage.gif”,ShortDescription=”Short Description 4″,Description=”Mo Ta San Pham 4″},

new Product {ProductID=5,ProductName =”San Pham 5″,CategoryID=2,Price=100000,Image=”/Content/Image/System/ProductImage.gif”,ShortDescription=”Short Description 5″,Description=”Mo Ta San Pham 5″}

}.ForEach(m => context.Products.Add(m));

#endregion

#region Order and OrderDetails

new List<Order>

{

new Order { OrderID=1,Customer=”Customer 1″,Email=”billsangvn@gmail.com”,Phone=”0985359218″,Address=”Hà Nội”,Active=false},

new Order {OrderID=2,Customer=”Customer 2″,Email=”billsangvn@gmail.com”,Phone=”0985359218″,Address=”Hà Nội”,Active=false},

new Order {OrderID=3,Customer=”Customer 3″,Email=”billsangvn@gmail.com”,Phone=”0985359218″,Address=”Hà Nội”,Active=false}

}.ForEach(m => context.Orders.Add(m));

#endregion

#region OrderDetail

new List<OrderDetail>

{

new OrderDetail {OrderID=1,ProductID =1, Quantity =1},

new OrderDetail {OrderID=1,ProductID =1, Quantity =1},

new OrderDetail {OrderID=2,ProductID =2, Quantity =1},

new OrderDetail {OrderID=2,ProductID =2, Quantity =1},

new OrderDetail {OrderID=3,ProductID =3, Quantity =1},

new OrderDetail {OrderID=3,ProductID =3, Quantity =1}

}.ForEach(m => context.OrderDetails.Add(m));

#endregion

}

 

}

}

Đăng ký dữ liệu mặc định

– Mở file Global.asax như hình vẽ :

image18

Thêm vào dòng code sau trong phương thức Application_Start :

Database.SetInitializer(new DefaultData());

// chú ý khai báo 2 name space sau :

using System.Data.Entity;

và name space chứa lớp DefaultData

using NewsMvc.Models;

Mã toàn bộ phương thức Application_Start như sau :

protected void Application_Start()

{

AreaRegistration.RegisterAllAreas();

 

WebApiConfig.Register(GlobalConfiguration.Configuration);

FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

RouteConfig.RegisterRoutes(RouteTable.Routes);

BundleConfig.RegisterBundles(BundleTable.Bundles);

Database.SetInitializer(new DefaultData());

}

2. Khai báo chuối kết nối

– Mở file Web.config ra như hình dưới :

image19

– Tìm đến thẻ connectionstring và xóa chuối kết nối có tên là DefaultConnection và thay vào chuỗi kết nối sau :

<add name=”VinaEntity” connectionString=”Data Source=|DataDirectory|ProductMvcDB.sdf”

providerName=”System.Data.SqlServerCe.4.0″/>

Chú ý tên chuỗi kết nối để trùng với tên lớp Entity định nghĩa các bảng CSDL , ở đây là VinaEntity .Các bạn có thể đặt tên chuỗi kết nối bất kỳ , nhưng khi khai báo truy vấn CSDL cần truyền tham số là chuỗi kết nối tương ứng nên rất bất tiện .Giải pháp là ta để tên lớp Entity trùng với tên chuỗi kết nối lưu trong file web.config

– Ở đây chúng ta dùng CSDL là Sql Compact .Chúng tôi đã giới thiệu sự tiện dụng của CSDL SqlCompact so với Sql Server trong tài liệu về lập trình web Asp.net MVC

– Một chú ý nữa đó là , khi dùng VS sinh mã máy tự động cho việc CRUD ( Create – Update- Delete) thì cần khai báo chuỗi kết nối sau , trước khi dùng VS sinh mã .

Nguồn: laptrinhvien.net

Leave a Comment

Your email address will not be published. Required fields are marked *