Tiếp tục với các bài viết trước, nay mình chia sẻ với mọi người, mình dùng DBContext để Connect Database trong ASP.NET MVC5. Bạn có thể xem lại các bài viết trước dưới đây: Show
Ok, để tạo connect được database trong ASP.NET MVC5, ta có thể connect SQL SERVER hoặc tạo database trong project luôn. Nhưng trước hết ta cần sự hổ trợ của EntityFramework, trong project này mình sẽ install EntityFramework 6.x. Bạn nhớ vào Manage Nuget Packages gõ EntityFramework để cài đặt nó Entity Framewok : nói sơ sơ là nó giúp ta ánh xạ các đối tượng quan hệ trong CSDL được dùng trong ADO.NET. Tạo bằng cách thủ công như hình sau: click chuột file App_Data->tạo một database, sao đó tạo table <connectionStrings> </connectionStrings>Bạn nhớ khai báo biến name và tên database để ta cấu hình connect Tạo models trong Asp.net MVC 5Hình bên trên mình tạo một table Users nên mình sẽ xây đựng mô hình thực thể cho User như sau: Click Models->add class User.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace MVC5_HelloWorld.Models { }Tạo class connect đến Database kế thừa từ DBContext.DBContext được dùng trong Entity Framework là một phần rất quan trọng để ta có thể kết nối được với các thực thể table trong CSDL của ta, nói cách khác dùng để connect database xong, sao đó ta có thể (insert, update,delete,query). Trong phần này sẽ tìm hiểu cách dùng Entity Framework Core trong ứng dụng Web - ASP.NET Core, để tương tác với các cơ sở dữ liệu. Trước tiên tạo ra dự án mẫu để thực hành, trong dự án sẽ thêm Model biểu diễn dữ liệu Article là các bài viết. Tạo thư mục dự án dotnet tool install --global dotnet-ef dotnet tool install --global dotnet-aspnet-codegenerator dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design dotnet add package Microsoft.EntityFrameworkCore.Design dotnet add package Microsoft.EntityFrameworkCore.SqlServer 9 thực hiện lệnh sau để tạo dự án Razor Pages dotnet new webapp Để làm việc với EF, hãy thêm các công cụ vào dotnet cũng như tích hợp các Package cần thiết, thực hiện các lệnh sau: dotnet tool install --global dotnet-ef dotnet tool install --global dotnet-aspnet-codegenerator dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design dotnet add package Microsoft.EntityFrameworkCore.Design dotnet add package Microsoft.EntityFrameworkCore.SqlServer Page Microsoft.EntityFrameworkCore.Design và Microsoft.EntityFrameworkCore.SqlServer cần phải có để thực hiện thao tác scaffolding (phát sinh tự động code CRUD (create, read, update, delete) theo model. Nếu muốn kết nối đến SQLite thì thực hiện lệnh dotnet add package Microsoft.EntityFrameworkCore.SQLite Nếu muốn kết nối đến MySQL thì thực hiện lệnh để thêm package tương ứng dotnet add package MySql.Data.EntityFramework Tạo Model mẫu biểu diễn bài viết (Blog)Tạo thư mục con dotnet add package Microsoft.EntityFrameworkCore.SQLite 0 thêm một lớp là Article.cs Pages/Article.cs using System; using System.ComponentModel.DataAnnotations; namespace razor08.efcore.Models { } Tạo Database ContextTạo ra DbContext biểu diễn cơ sở dữ liệu sẽ làm việc (xem thêm ) Trong thư mục dotnet add package Microsoft.EntityFrameworkCore.SQLite 1 tạo ra lớp dotnet add package Microsoft.EntityFrameworkCore.SQLite 2 using Microsoft.EntityFrameworkCore; using razor08.efcore.Models; namespace razor08.efcore.Data { } Chuẩn bị MS SQL ServerNếu đã có SQL Server thì bỏ qua bước này, nếu chưa có thì có thể nhanh chóng tọa ra một SQL Server bằng Docker (Học Docker), hướng dẫn tại MSSQL Tải về docker-compose.yml, để vào một thư mục, rồi thực hiện lệnh: docker up -d Bạn đã có một SQL Server lắng nghe ở cổng dotnet add package Microsoft.EntityFrameworkCore.SQLite 3, tài khoản dotnet add package Microsoft.EntityFrameworkCore.SQLite 4 và password là dotnet add package Microsoft.EntityFrameworkCore.SQLite 5 Chuỗi kết nối nếu db đặt tên là dotnet add package Microsoft.EntityFrameworkCore.SQLite 6 là:"Data Source=localhost,1433; Initial Catalog=articledb; User ID=SA;Password=Password123" Đăng ký ArticleContext vào hệ thống ServiceCollectionBạn mở file config của ứng dụng dotnet add package Microsoft.EntityFrameworkCore.SQLite 7 (về cấu hình ứng dụng xem tại: ), thêm vào nội dung thành: { "Logging": { },
"AllowedHosts": "",
*"ConnectionStrings": {
"ArticleContext": "Data Source=localhost,1433; Initial Catalog=articledb; User ID=SA;Password=Password123"
}
}
Ở đây đã thêm vào file cấu hình thông tin chuỗi kết nối: dotnet add package Microsoft.EntityFrameworkCore.SQLite 8 Đăng ký ArticleContext vào dịch vụ hệ thống bằng cách mở file dotnet add package Microsoft.EntityFrameworkCore.SQLite 9 và chỉnh sửa: /.. using Microsoft.EntityFrameworkCore; namespace razor08.efcore {
services.AddDbContext<ArticleContext>(options => {
string connectstring = Configuration.GetConnectionString("ArticleContext");
options.UseSqlServer(connectstring);
}); }
services.AddDbContext (mã nguồn EntityFrameworkServiceCollectionExtensions) là phương thức đăng ký dịch vụ DbContext, dịch vụ thuộc loại Scoped, nên chỉ lấy được khi một phạm vi được tạo ra.Về cách lấy ra dịch vụ đã đăng ký xem tại: IServiceCollection và Inject Từ đây bạn đã có thể lấy ra dịch vụ ArticleContext để thực hiện tương tác với SQL Server (database tên: articledb ) Tạo các trang thao tác CRUD của ModelKhi đã có Model Article bạn có thể tạo ra các trang để thực hiện việc tạo mới, cập nhật, xóa, hay xem (các thao tác này là CRUD). Tuy nhiên, nếu bạn dùng công cụ EF, bạn có thể phát sinh tự động các trang razor có chức năng này. Thực hiện: Tạo CRUD là các trang razorpage, cho model Aricle, các trang sinh ra lưu tại dotnet add package MySql.Data.EntityFramework 0 dotnet aspnet-codegenerator razorpage -m Article -dc ArticleContext -udl -outDir Pages/Blog --referenceScriptLibraries Cú pháp khác của dotnet add package MySql.Data.EntityFramework 1 xem tại: dotnet-aspnet-codegenerator Nếu muốn phát trinh controller thì thay razorpage bằng controller Sau khi chạy lệnh, nó tạo ra các trang trong dotnet add package MySql.Data.EntityFramework 0 các trang kèm PageModel như: dotnet add package MySql.Data.EntityFramework 3, dotnet add package MySql.Data.EntityFramework 4, dotnet add package MySql.Data.EntityFramework 5, dotnet add package MySql.Data.EntityFramework 6, dotnet add package MySql.Data.EntityFramework 7 - bạn hãy mở code của chúng ra xem và sửa lại nếu muốn Những trang này có thể truy cập qua địa chỉ dotnet add package MySql.Data.EntityFramework 8, dotnet add package MySql.Data.EntityFramework 9 ... Tạo Database (migration)Các cấu hình trên là làm việc trên ArticleContext tươnng ứng là Database có tên articledb (cấu hình chuỗi kết nối), tuy nhiên trong Server SQL chưa có CSDL. Do vậy, thực hiện migration (xem Tạo migration trong EntityFramework) như sau: dotnet tool install --global dotnet-ef dotnet tool install --global dotnet-aspnet-codegenerator dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design dotnet add package Microsoft.EntityFrameworkCore.Design dotnet add package Microsoft.EntityFrameworkCore.SqlServer 0 Sau lệnh này nó tạo - cập nhật Db, có thể kiểm tra bằng Như vậy đã có Database, giờ bạn đã có thể truy cập địa chỉ dotnet add package MySql.Data.EntityFramework 8 sẽ là trang hiện thị danh sách bài viết, dotnet add package MySql.Data.EntityFramework 9 để tạo danh sách bài viết ... Thay vì tạo thủ công một số Article để chèn vào Database ở Url dotnet add package MySql.Data.EntityFramework 9 có thể chèn một số Article tự động như sau: Tạo ra lớp using System; using System.ComponentModel.DataAnnotations; namespace razor08.efcore.Models { }
3 với nội dung:dotnet tool install --global dotnet-ef dotnet tool install --global dotnet-aspnet-codegenerator dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design dotnet add package Microsoft.EntityFrameworkCore.Design dotnet add package Microsoft.EntityFrameworkCore.SqlServer 1 Bạn có thể chạy using System; using System.ComponentModel.DataAnnotations; namespace razor08.efcore.Models { }
4 khi khởi động ứng dụng, có thể trong Startup.cs, Program.cs. Ví dụ thực hiện trong hàm Main của Program.csdotnet tool install --global dotnet-ef dotnet tool install --global dotnet-aspnet-codegenerator dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design dotnet add package Microsoft.EntityFrameworkCore.Design dotnet add package Microsoft.EntityFrameworkCore.SqlServer 2 Cập nhật và trình bày lại các trangCác trang phát sinh ở thư mục using System; using System.ComponentModel.DataAnnotations; namespace razor08.efcore.Models { }
5 bạn có thể tùy chỉnh theo mục đích của mình. Ở đây thực hiện cập nhật vài thông tin sau:Trong các trang .cshtml có sử dụng using System; using System.ComponentModel.DataAnnotations; namespace razor08.efcore.Models { }
6 để hiện thị tiêu đề của Model, bạn có thể thiết lập tiêu đề này thay cho tên mặc định của thuộc tính, sử dụng using System; using System.ComponentModel.DataAnnotations; namespace razor08.efcore.Models { }
7, ví dụ:dotnet tool install --global dotnet-ef dotnet tool install --global dotnet-aspnet-codegenerator dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design dotnet add package Microsoft.EntityFrameworkCore.Design dotnet add package Microsoft.EntityFrameworkCore.SqlServer 3 Mở Blog/Index.cshtml có thể xóa bớt các trường cần hiện thị, trình bày lại theo nhu cầu. Ví dụ trình bày trang using System; using System.ComponentModel.DataAnnotations; namespace razor08.efcore.Models { }
8 |