by oclockvn at 12:24 AM 02/06/2017

asp.net mvc 5 p5: Xây dựng Database sử dụng Entity Framework

Entities Project

Ban đầu mình tính viết tất cả trong 1 project, nhưng như vậy sẽ không giới thiệu được cách tổ chức 1 solution theo hướng "tốt". Vì vậy mình sẽ tạo mới 1 class library project dùng để chứa Entity Framework (EF).

Mình thích tạo tên project theo kiểu: "solution-name" + "functionality-project-name"

entity project

Setup Entity Framework

Trong bài này mình sẽ không giới thiệu về EF mà chỉ đi về hướng thiết kế database cho project này.

Việc cài đặt rất dễ dàng bằng nuget và thông qua Package Manager Console. Nhớ chọn đúng project cần cài đặt nhé.

setup entity framework

Data Model

BaseEntity

Chỉ đơn giản là các class đại diện cho entity (model), ở đây mình tận dụng lợi thế của code-first (mình dùng code-first trong project này) và tạo 1 lớp BaseEntity để các lớp khác kế thừa và dùng lại những property chung nhất (Xem BaseEntity)

Product

Đại diện cho 1 sản phẩm, trước mắt mình sẽ liệt kê bằng trang chi tiết sản phẩm và thêm vào những thuộc tính cần thiết, nếu có gì cần thêm/bớt, mình dễ dàng làm được nhờ Migration hoặc ..dùng chiêu (^^)

Trong Product, mình đã thiết kế 1 cách ...làm biếng. Ví dụ như:

RAM: 2 GB

được thể hiện bằng:

public string RAM { get; set; }

Liệu cách này có tốt? Có cách nào tốt hơn?

Tốt hay không, chắc chắn là không tốt rồi. 1 ví dụ đơn giản cho việc tìm kiếm với dung lượng Ram, bạn chắc chắn sẽ muốn so sánh số 2 chứ không muốn thêm chữ GB làm gì, tất nhiên rồi.

Cách tốt hơn? Dĩ nhiên là có, bạn nên lưu thành 2 field:

Các property còn lại cũng dựa vào mô tả sản phẩm ở trang chi tiết, ví dụ như cái sony này.

1 lưu ý cuối cùng là khóa ngoại và navigation property, mình..thích thì mình không làm thôi :)). Khóa ngoại được dùng để tham chiếu tới danh mục (cha/con) sản phẩm, và navigation property giúp bạn tham chiếu nhanh hơn.

...Um, mình nghĩ lại rồi, mình sẽ thêm navigation property trong video tới cho tiện :v

Category

Cũng tương tự như Product, không có gì khác biệt. Mình sẽ thêm navigation property ở video sau.

DbContext

Mọi thứ đều được diễn tả trong code rồi, ExpressDb đại diện cho 1 database, được kế thừa từ DbContext, trong đó bao gồm 2 DbSet (tức table) là Products và Categories.

Các table khác sẽ được thêm ở video tiếp.

Xem video full HD không che tại đây.

Source code vẫn được up-to-date tại repo didongexpress.

relate posts
by {{relate.UpdatedBy}} at 02/21/2018

{{relate.Title}}

  • {{relate.TotalComment}}
  • {{relate.View}}
  • {{relate.AveragePoint}}
[{{postCtrl.comments.length}}] comments
all comments {{ postCtrl.isHiddenComment ? 'show comments' : 'hide comments' }}
what do you want to say?

(*) markdown supported with html disabled