ASP.NET Core 3.0 如何使用 Database First

我的還是比較習慣先開好資料庫,再使用Database First 進行開發,但是目前 ASP.NET Core 3.0 並沒有類似 MVC 5 的 EntityFramework Reverse POCO Generator 的工具,而是要使用 Power Shell 的指令來產生 Models ,可以參考

可以參考 : https://docs.microsoft.com/zh-tw/ef/core/get-started/aspnetcore/existing-db

Step 1. 先建立資料庫,這是參考文章提供的

CREATE DATABASE [Blogging];
GO

USE [Blogging];
GO

CREATE TABLE [Blog] (
    [BlogId] int NOT NULL IDENTITY,
    [Url] nvarchar(max) NOT NULL,
    CONSTRAINT [PK_Blog] PRIMARY KEY ([BlogId])
);
GO

CREATE TABLE [Post] (
    [PostId] int NOT NULL IDENTITY,
    [BlogId] int NOT NULL,
    [Content] nvarchar(max),
    [Title] nvarchar(max),
    CONSTRAINT [PK_Post] PRIMARY KEY ([PostId]),
    CONSTRAINT [FK_Post_Blog_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [Blog] ([BlogId]) ON DELETE CASCADE
);
GO

INSERT INTO [Blog] (Url) VALUES
('http://blogs.msdn.com/dotnet'),
('http://blogs.msdn.com/webdev'),
('http://blogs.msdn.com/visualstudio')
GO

Step 2. 從 NuGet 安裝必要套件
Microsoft.EntityFrameworkCore 3.0.0-preview7.19362.6
Microsoft.EntityFrameworkCore.SqlServer 3.0.0-preview7.19362.6
Microsoft.EntityFrameworkCore.SqlServer.Design 2.0.0-preview1-final
Microsoft.EntityFrameworkCore.Tools 3.0.0-preview7.19362.6

Step 3. 選擇「工具 」→ 「 NuGet 套件管理員 」 → 「 套件管理員主控台 」

//貼上,並執行下面這段Code
Scaffold-DbContext -Connection "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -context BloggingContext -Project FirstWeb

注意:
1.「-Connection」可以省略
2. 「-OutputDir Models」 可以修改Model要產生在哪一個資料夾
3. 「-context BloggingContext」 使用預設,可以省略
4. 「-Project FirstWeb」 只有一個專案,可以省略

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models 

Step 4. 資料庫更新時處置

//若資料庫有更新(全部),則後面可以加上 「-Force」 
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Force
//只更新某一個資料表,如 Blog,可以加上-Tables Blog
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Tables Blog -Force

上述動作只是產生資料庫的Model,我們必須要在Startup.cs 設定資料庫連線才可以順利存取資料庫

public void ConfigureServices(IServiceCollection services)
        {
         var connection = @"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0";
            services.AddDbContext<BloggingContext>(options => options.UseSqlServer(connection));
        }

在 Controller 的範例程式碼

private readonly BloggingContext_context;
public CompanyController(BloggingContextcontext)
{
    _context = context;
}
public IActionResult Index()
{
    var model=_context.Role.Where(x=>x.IsDeleted==false).Select(b => new RoleVM
     {
         Id = b.Id,
         RoleName = b.RoleName,
         RoleTitle = b.RoleTitle
      }).ToList();
    return View(model);
  }

發佈留言

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