.Net 8 如何設定CodeFirst |使用 EF8 SQL Server Asp.Core EntityFramwork8

by | 8 月 24, 2024 | 程式 | 0 comments

Views: 27

這塊其實很少做,通常專案設定一次後就很少設定第二次

速成懶人包

  1. 用Nuget安裝這四個套件:
    • Microsoft.EntityFrameworkCore
    • Microsoft.EntityFrameworkCore.Design
    • Microsoft.EntityFrameworkCore.Tools
    • Microsoft.EntityFrameworkCore.SqlServer (看你用哪個類型的DB)
  2. 新增Model相關類別
  3. 新增一個繼承DbContext物件的Context物件,例如ApplicationDbContext.cs
  4. appsettings.json加入連線字串 (DB那邊也要開好對應的權限)
  5. Program.cs加入注入連線字串的設定

開新專案

建立專案

搜尋Controll → 選ASP.NET Core Web 應用程式(Model-View-Controller)

設定專案名稱

專案名稱自己隨意

專案設定

專案設定我是設定.Net8 LTS的專案,我習慣使用「不要使用最上層陳述式」。

專案開好了

專案開好囉

Nuget安裝套件

  • Microsoft.EntityFrameworkCore
  • Microsoft.EntityFrameworkCore.Design
  • Microsoft.EntityFrameworkCore.Tools
  • Microsoft.EntityFrameworkCore.SqlServer (看你用哪個類型的DB)

開啟Nuget安裝工具

搜尋Nuget

開始安裝

開始安裝,中間會出現各種確認的畫面,直接按下確定就好。

裝好的會有綠色勾

新增Model

這邊我用一個Model當例子Book.cs,路徑我放在/Models/Book.cs

book.cs

using System.ComponentModel.DataAnnotations;
using Microsoft.EntityFrameworkCore;

namespace CodeFirstDemo.Models
{
    /// <summary>
    /// 書本
    /// </summary>
    public class Book
    {
        /// <summary>
        /// 流水號
        /// </summary>
        [Key]
        [Comment("流水號")]
        public int Id { get; set; }

        /// <summary>
        /// 書名
        /// </summary>
        [Comment("書名")]
        public string Name { get; set; }
    }
}

新增ApplicationDbContext.cs

這邊你可以自己取名,不一定要叫做ApplicationDbContext

路徑我習慣放 /Models/ApplicationDbContext.cs

ApplicationDbContext.cs

using Microsoft.EntityFrameworkCore;

namespace CodeFirstDemo.Models
{
    public class ApplicationDbContext: DbContext
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
        {
        }

        /// <summary>
        /// 書籍資料
        /// </summary>
        public DbSet<Book> Books { get; set; }
    }
}

appsettings.json新增連線字串

appsettings.json位置

.net core之後的連線字串都是寫在appsetting.json

使用Windows帳號做認證

"ConnectionStrings": {
    "DefaultConnection": "Data Source=資料庫IP;Initial Catalog=資料庫名稱; Integrated Security=true;TrustServerCertificate=True;"
  },

使用資料庫帳密認證

"ConnectionStrings": {
    "DefaultConnection": "Data Source=資料庫IP;Initial Catalog=資料庫名稱; User id=資料庫帳號;Password=密碼; TrustServerCertificate=True;"
  },

完整的appsettiongs.json (使用作業系統認證)

{
  "ConnectionStrings": {
    "DefaultConnection": "Data Source=.;Initial Catalog=CodeFirstDemo; Integrated Security=true;TrustServerCertificate=True;"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}

Program.cs加入依賴注入連線字串

.net Core之後有內建依賴注入,要寫在Program.cs

Program.cs位置

加入連線字串依賴注入,這邊指定將DefaultConnection注入到ApplicationDbContext這個物件

builder.Services.AddDbContext<ApplicationDbContext>(
    db => db.UseSqlServer(
        builder.Configuration.GetConnectionString("DefaultConnection")
    ), ServiceLifetime.Singleton);
完整的Program.cs 點我展開
using CodeFirstDemo.Models;
using Microsoft.EntityFrameworkCore;

namespace CodeFirstDemo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);

            // Add services to the container.
            builder.Services.AddControllersWithViews();

            //*******************************************
            //對ApplicationDbContext進行連線字串註冊
            builder.Services.AddDbContext<ApplicationDbContext>(
                db => db.UseSqlServer(
                    builder.Configuration.GetConnectionString("DefaultConnection")
                ), ServiceLifetime.Singleton);
            //*******************************************
            var app = builder.Build();

            // Configure the HTTP request pipeline.
            if (!app.Environment.IsDevelopment())
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthorization();

            app.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");

            app.Run();
        }
    }
}

CodeFirst指令

官方說明

主要常用的有這幾個,通常都只用add-migrationupdate-database

add-migration [name] #新增一個資料庫異動
update-database #更新資料庫
Script-Migration -Idempotent #產生資料庫異動的SQL 指令(這個很實用)
remove-migration #移除最後一個migration
drop-database #砍掉資料庫

如何下指令

套件管理器主控台

系統會開出分頁

下方這邊就是套件管理主控台,就可以開始下指令建立資料表與更新資料庫

0 Comments

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *