Xây dựng web api entity framework là một trong những keyword được search nhiều nhất trên Google về chủ đề xây dựng web api entity framework. Trong bài viết này, chúng tôi sẽ viết bài viết Hướng dẫn xây dựng web api entity framework mới nhất 2020.
Hướng dẫn xây dựng web api entity framework mới nhất 2020
1. Website Api là gì
Asp.net web Api là một framework giúp cho việc xây dựng HTTP service một phương pháp dễ dàng. Chúng đủ sức tăng trưởng cho nhiều clients không giống nhau như trình duyệt, mobile app. web api là một hệ thống để phát triển các áp dụng dựa trên Restfull service trong .Net. Các bạn đủ nội lực ảnh dung vị trí của Asp.net Api trong .Net giống như ảnh bên dưới:
2. Áp dụng dùng thử
Công nghệ sử dụng:
- Visual studio 2013
- .Net 4.6
- web Api 2.0
- Entity framework 6.0
- Knockout js
2.1. Tạo project
- mở Visual studio
- lựa chọn New project
- Tại cửa sổ dialog lựa chọn Asp.net website applicaltion
- Tiếp đến lựa chọn web API như ảnh bên dưới
2.2. Tạo data models
Trong ứng dựng demo này tôi sẽ tạo 2 model category và product. Để tạo một model mới, chúng ta click chuột phải tại thư mục Models chọn “New” sau đó lựa chọn “class” như cách tạo các class thông thường.
– Category class :
using System.ComponentModel.DataAnnotations;namespace WebAPIDemo.Models publicclassCategorypublicint Id get; set; [Required]publicstring Name lấy; set;
– Product class:
using System.ComponentModel.DataAnnotations;namespace WebAPIDemo.Models publicclassProductpublicint Id get; set; [Required]publicstring Name lấy; set; publicdecimal Price get; set; publicint CategoryId quét; set; publicvirtualCategory Category get; set;
note với Entity Framework 6.0, nó đang hỗ trợ cơ chế lazy loading. Trong dùng thử này phân khúc Product có khóa ngoại là CategoryId, cùng lúc nó đủ sức truy cập tới Category thông qua tính chất Category. Để có lazy loading chúng ta cần thêm từ khóa vitual cho thuộc tính này. Chúng ta đủ sức hiểu lazy loading trong trường hợp này giống như sau:
db.products.ToList() // thị trường Category sẽ không được load cùng danh mục productsdb.products[0].Category // chỉ khi truy suất vào một product cụ thể Category mới được load
2.3. Tạo controller
- nhấn chuột phải tại thư mục Controller => chọn “Add” => lựa chọn “Controller”
- Tại cửa sổ “Add Scaffold” chúng ta chọn “Web API 2 Controller with actions, using Entity Framework”.
Tại cửa sổ “Add controller”
- Tại Model class dropdownlist, chọn Category class.
- Tích lựa chọn “Use async controller actions”.
- Trong mục “Controller Name” tên controller auto được điền vào.
Tiếp đến click (+) button ở mục “Data context Class”, tại cửa sổ “New Data Context” gõ tên Data context class theo mong muốn. Ở đây tôi tạo class có tên : WebAPIDemoContext. ProductsController được tạo tương tự như các bước trên.
2.4. sử dụng việc với Entity framework
Trong demo này tôi sử dụng Code First Migrations để init data và thao tác với Sql server. đầu tiên cần enable migration, để làm điều này chúng ta thực hiện như sau: chọn tool => chọn Nuget Package Manager => chọn Package Manage Console. Trong cửa sổ Package Manage Console gõ lệnh:
Enable-Migrations
Một thư mục Migrations được xây dựng cùng một file có tên là “Configuration”. tiếp theo chúng ta sẽ cải tiến method “Seed trong class này để init data. Đây là method xây dựng sẵn trong class DbContext của Entity Framework và chúng ta hoàn toàn đủ sức ghi đè theo trường hợp sử dụng
protectedoverridevoidSeed(WebAPIDemoContext context) context.Categories.AddOrUpdate(x => x.Id,newCategory Id =1, Name ="Mobile" ,newCategory Id =2, Name ="Tablet" ,newCategory Id =3, Name ="Smart watch" ); context.Products.AddOrUpdate(x => x.Id,newProduct Id =1, Name ="Product 1", CategoryId =1, Price =9.99M, ,newProduct Id =2, Name ="Product 2", CategoryId =1, Price =12.95M, ,newProduct Id =3, Name ="Product 3", CategoryId =2, Price =15, ,newProduct Id =4, Name ="Product 4", CategoryId =3, Price =10, );
Ok, chúng ta đang có một số data check cho demo. ngày nay chúng ta cần một class để tạo table và insert những bản ghi trên vào sql server, để sử dụng điều đó ta gõ lệnh:
Add-Migration Initial Update-Database
Một file migarion được tạo ra với code được tự động generate
namespace WebAPIDemo.Migrations using System;using System.Data.Entity.Migrations;publicpartialclassInitial : DbMigrationpublicoverridevoidUp() CreateTable("dbo.Categories", c =>new Id = c.Int(nullable: false, identity: true), Name = c.String(nullable: false), ) .PrimaryKey(t => t.Id);CreateTable("dbo.Products", c =>new Id = c.Int(nullable: false, identity: true), Name = c.String(nullable: false), Price = c.Decimal(nullable: false, precision: 18, scale: 2), CategoryId = c.Int(nullable: false), ) .PrimaryKey(t => t.Id) .ForeignKey("dbo.Categories", t => t.CategoryId, cascadeDelete: true) .Index(t => t.CategoryId); publicoverridevoiddownload() DropForeignKey("dbo.Products", "CategoryId", "dbo.Categories");DropIndex("dbo.Products", new[] "CategoryId" );DropTable("dbo.Products");DropTable("dbo.Categories");
Với đoạn code ở trên, Code First sẽ tự động liên kết, tạo database, table và insert data tới sql server trong lần khởi chạy đầu tiền tài ứng dụng, những lần sau đó nếu có thay đổi migration DB sẽ được update ngược lại chúng sẽ không tạo lại nữa. hiện giờ chúng ta nhấn F5 để chạy web, sau đó kiểm tra database trong Server Exploer của Visual studio. Nếu có đa số table và dữ liệu giống như ảnh bên dưới thì việc khởi tạo DB đã thành đạt.
Xem thêm: Thiết kế Website chuyên nghiệp
2.5. thiết lập client với với knockout js
Trong ứng dụng này, tôi sử dụng Knockout js để xây dựng phía client. Knockout js là một thư viện javascript sử dụng mô ảnh Model-View-ViewModel (MVVM). Các bạn đủ sức nghiên cứu thêm tại web Knockout. có thể hình dung mô hình hoạt động của áp dụng như sau:
Chúng ta sẽ thiết lập 3 chức năng cơ bản cho vận dụng dùng thử :
- Show mục lục món hàng
- Show chi tiết hàng hóa
- Thêm mới sản
Trước tiên, chúng ta add knockout js tới vận dụng. Trong Package manager console gõ lệnh:
Install-Package knockoutjs
Tạo lượt xem model:
Ở đây tôi sẽ tạo một file với tên là app.js trong thư mực Scripts của dự án để viết các hàm thao tác dự liệu với Server thông qua Knockout JS
varViewModel=function () var self =this; self.products = không.observableArray(); self.error = ko.observable();var productsUri ='/api/products/';functionajaxHelper(uri, method, data) self.error(''); // Clear error messagereturn $.ajax( type: method, url: uri, dataType: 'json', contentType: 'application/json', data: data ? JSON.stringify(data) : null).thất bại(function (jqXHR, textStatus, errorThrown) self.error(errorThrown); ); functiongetAllProducts() ajaxHelper(productsUri, 'GET').done(function (data) self.products(data); ); // Fetch the initial data.getAllProducts(); self.detail = ko.observable(); self.getProductDetail=function (item) ajaxHelper(productsUri + item.Id, 'GET').done(function (data) self.detail(data); ); self.categories = không.observableArray(); self.newProduct= Category: không.observable(), Name: không.observable(), Price: ko.observable(), var categoriesUri ='/api/categories/';functiongetCategories() ajaxHelper(categoriesUri, 'GET').done(function (data) self.categories(data); ); self.addProduct=function (formElement) var product = CategoryId: self.newProduct.Category().Id, Name: self.newProduct.Name(), Price: self.newProduct.Price(), ;ajaxHelper(productsUri, 'POST', product).done(function (item) self.products.push(item); ); getCategories(); ; ko.applyBindings(newViewModel());
Binding trên view:
class="panel panel-default">
class="panel-heading">
class="panel-title">Products
class="panel-body">
class="list-unstyled"data-bind="foreach: products">
data-bind="text: CategoryName">: data-bind="text: Name">href="#"data-bind="click: $parent.getProductDetail">Details
ứng dụng demo sẽ như ảnh bên dưới:
Trên đây tôi đã tạo một áp dụng đơn giản sử dụng Asp.Net WebAPI 2.0, EF 6.0. Hy vọng rằng dùng thử này sẽ khiến các bạn chưa biết đủ sức bắt đầu làm việc với Asp.net WebApi. Nó là thân thuộc nếu các bạn đã từng làm việc với Asp.Net Mvc, song song nó cũng không quá khó khăn cho những ai mới làm quen. Chúc các bạn thành công.