Hướng dẫn tạo chuỗi kết nối file asp với host năm 2024

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:

  • ASP.NET MVC 5 Hello World
  • ASP.NET MVC 5 Create Shared Layout Razor & ViewStart
  • ASP.NET MVC 5 Install Bootstrap

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ó

Hướng dẫn tạo chuỗi kết nối file asp với host năm 2024

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

Hướng dẫn tạo chuỗi kết nối file asp với host năm 2024
Mình sẽ chỉ mọi người các tạo thủ công này, để xử lý một cách tùy ý. Sau khi tạo xong để connnect được tên Database vừa tạo bạn copy câu lệnh chuỗi sao dán vào project/Web.config

<connectionStrings>

<add name="demoASPEntities" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=demomvc5;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\demomvc5.mdf" providerName="System.Data.SqlClient" />
</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 5

Hì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 {

public class User
{
    [Key, Column(Order = 1)]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int idUser { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public int Lever { get; set; }
}
}

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 {

public class Article  
{  
    public int ID { get; set; }  
    public string Title { get; set; }
    [DataType(DataType.Date)]  
    public DateTime PublishDate { get; set; }
    public string Content {set; get;}  
}  
}

Tạo Database Context

Tạ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 {

public class ArticleContext : DbContext  
{  
    public ArticleContext(DbContextOptions<ArticleContext> options) : base(options)  
    {  
        // Phương thức khởi tạo này chứa options để kết nối đến MS SQL Server  
        // Thực hiện điều này khi Inject trong dịch vụ hệ thống  
    }  
    public DbSet<Article> Article {set; get;}  
}  
}

Chuẩn bị MS SQL Server

Nế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 ServiceCollection

Bạ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": {

"LogLevel": {  
  "Default": "Information",  
  "Microsoft": "Warning",  
  "Microsoft.Hosting.Lifetime": "Information"  
}  
}, "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 {

public class Startup  
{
    /..
    public void ConfigureServices(IServiceCollection services)  
    {  
        services.AddRazorPages();  
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 Model

Khi đã 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

Hướng dẫn tạo chuỗi kết nối file asp với host năm 2024

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 {

public class Article  
{  
    public int ID { get; set; }  
    public string Title { get; set; }
    [DataType(DataType.Date)]  
    public DateTime PublishDate { get; set; }
    public string Content {set; get;}  
}  
} 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 {

public class Article  
{  
    public int ID { get; set; }  
    public string Title { get; set; }
    [DataType(DataType.Date)]  
    public DateTime PublishDate { get; set; }
    public string Content {set; get;}  
}  
} 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.cs

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 2

Cập nhật và trình bày lại các trang

Các trang phát sinh ở thư mục

using System; using System.ComponentModel.DataAnnotations; namespace razor08.efcore.Models {

public class Article  
{  
    public int ID { get; set; }  
    public string Title { get; set; }
    [DataType(DataType.Date)]  
    public DateTime PublishDate { get; set; }
    public string Content {set; get;}  
}  
} 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 {

public class Article  
{  
    public int ID { get; set; }  
    public string Title { get; set; }
    [DataType(DataType.Date)]  
    public DateTime PublishDate { get; set; }
    public string Content {set; get;}  
}  
} 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 {

public class Article  
{  
    public int ID { get; set; }  
    public string Title { get; set; }
    [DataType(DataType.Date)]  
    public DateTime PublishDate { get; set; }
    public string Content {set; get;}  
}  
} 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 {

public class Article  
{  
    public int ID { get; set; }  
    public string Title { get; set; }
    [DataType(DataType.Date)]  
    public DateTime PublishDate { get; set; }
    public string Content {set; get;}  
}  
} 8