Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9703

ASP.Net Core でスキャフォールディングを使用して、データベースから WebAPIを構築するまで

$
0
0

C#(ASP.Net Core) で dotnet-cli を使用して WebAPIを構築してみます。

プロジェクトを作成する

プロジェクトを新規に作成します。
以下のコマンドでプロジェクトの種類を検索してみます。

dotnetnew--listTemplatesShortNameLanguageTags----------------------------------------------------------------------------------------------------------------------------------ConsoleApplicationconsole[C#], F#, VB      Common/ConsoleClasslibraryclasslib[C#], F#, VB      Common/LibraryWPFApplicationwpf[C#]              Common/WPFWPFClasslibrarywpflib[C#]              Common/WPFWPFCustomControlLibrarywpfcustomcontrollib[C#]              Common/WPFWPFUserControlLibrarywpfusercontrollib[C#]              Common/WPFWindowsForms(WinForms)Applicationwinforms[C#]              Common/WinFormsWindowsForms(WinForms)Classlibrarywinformslib[C#]              Common/WinFormsWorkerServiceworker[C#]              Common/Worker/WebUnitTestProjectmstest[C#], F#, VB      Test/MSTestNUnit3TestProjectnunit[C#], F#, VB      Test/NUnitNUnit3TestItemnunit-test[C#], F#, VB      Test/NUnitxUnitTestProjectxunit[C#], F#, VB      Test/xUnitRazorComponentrazorcomponent[C#]              Web/ASP.NETRazorPagepage[C#]              Web/ASP.NETMVCViewImportsviewimports[C#]              Web/ASP.NETMVCViewStartviewstart[C#]              Web/ASP.NETBlazorServerAppblazorserver[C#]              Web/BlazorBlazorWebAssemblyAppblazorwasm[C#]              Web/Blazor/WebAssemblyASP.NETCoreEmptyweb[C#], F#          Web/EmptyASP.NETCoreWebApp(Model-View-Controller)mvc[C#], F#          Web/MVCASP.NETCoreWebAppwebapp[C#]              Web/MVC/Razor PagesASP.NETCorewithAngularangular[C#]              Web/MVC/SPAASP.NETCorewithReact.jsreact[C#]              Web/MVC/SPAASP.NETCorewithReact.jsandReduxreactredux[C#]              Web/MVC/SPARazorClassLibraryrazorclasslib[C#]              Web/Razor/Library/Razor Class LibraryASP.NETCoreWebAPIwebapi[C#], F#          Web/WebAPIASP.NETCoregRPCServicegrpc[C#]              Web/gRPCdotnetgitignorefilegitignoreConfigglobal.jsonfileglobaljsonConfigNuGetConfignugetconfigConfigDotnetlocaltoolmanifestfiletool-manifestConfigWebConfigwebconfigConfigSolutionFileslnSolutionProtocolBufferFileprotoWeb/gRPC

今回作成したい WebAPIのプロジェクトは WebAPIということが分かりましたので、以下のコマンドでプロジェクトを作成します。

dotnetnewwebapi--namewbapi

wb.sqlte という SQLite のファイルを元にスキャフォールディングしましたので、以降の内容はプロジェクトフォルダに wb.sqlte というファイルがある前提で記述しています。

必要なツールをインストールする

1.Entity Framework Core ツールのインストール

以下のコマンドでインストーるします。
グローバルにインストールします。

dotnettoolinstall--globaldotnet-ef

既にインストールしている場合は以下のコマンドで最新にします。

dotnettoolupdate--globaldotnet-ef
dotnetef

_/\__---==/\\______|.\|\|__||__||)\\\|_||_|\_/|//|\\|___||_|/\\\/\\EntityFrameworkCore.NETCommand-lineTools3.1.6Usage:dotnetef[options][command]Options:--versionShowversioninformation-h|--helpShowhelpinformation-v|--verboseShowverboseoutput.--no-colorDon't colorize output.
  --prefix-output  Prefix output with level.

Commands:
  database    Commands to manage the database.
  dbcontext   Commands to manage DbContext types.
  migrations  Commands to manage migrations.

Use "dotnet ef [command] --help" for more information about a command.

という表示がされれば成功です。

2.aspnet-codegenerator のインストール

以下のコマンドでインストールします。

dotnettoolinstall--globaldotnet-aspnet-codegenerator

既にインストールしている場合は以下のコマンドで最新にします。

dotnettoolupdate--globaldotnet-aspnet-codegenerator

nuget パッケージのインストール

以下のコマンドでそれぞれインストールします。

dotnetaddpackageMicrosoft.EntityframeworkCore.DesigndotnetaddpackageMicrosoft.EntityframeworkCore.SqlitedotnetaddpackageMicrosoft.VisualStudio.Web.CodeGeneration.DesigndotnetaddpackageMicrosoft.EntityFrameworkCore.SqlServer
  • Microsoft.EntityframeworkCore.Design

    この後出てくる dotnet ef コマンドでデータベースからモデルを作成する際に使用します。

  • Microsoft.EntityframeworkCore.Sqlite

    今回のプログラムはデータベースにSQLiteを使用します。

    他のDBMSを使用する場合はDBMSに合ったパッケージに変更するだけです。

  • Microsoft.VisualStudio.Web.CodeGeneration.Design

    この後出てくる dotnet aspnet-codegenerator コマンドでモデルからコントローラーを作成する際に使用します。

  • dotnet add package Microsoft.EntityFrameworkCore.SqlServer

    正直なぜ必要なのか分かりませんが、無いと dotnet aspnet-codegenerator コマンドでエラーになったため、インストールしました。

データベースからモデルの作成

以下のコマンドを実行します。

dotnetefdbcontextscaffold"Data Source=wb.sqlite"Microsoft.EntityframeworkCore.Sqlite-oModels

-o オプションは出力ディレクトリを指定します。

モデルからコントローラーの作成

以下のコマンドを実行します。

dotnetaspnet-codegeneratorcontroller-namewbController-async-api-mWb-dcwbContext-outDirControllers

-name コントローラーの名前

-async async
-api api
-m Wb モデルクラス
-dc DBコンテキスト
-outDir 出力ディレクトリ

Startup に DBコンテキストを追加する処理を記述

Startup.cs の ConfigureServices メソッドに以下を追記します。

startup.cs
publicvoidConfigureServices(IServiceCollectionservices){services.AddControllers();services.AddDbContext<Models.wbContext>();//この行}

launchSettings.jsonの編集

launchSettings.json の launchUrl を今回作成した COntrollerにルーティングされるよう修正します。

具体的には launchUrl の部分です。

Properties/launchSettings.json
"sample2":{"commandName":"Project","launchBrowser":true,"launchUrl":"api/wb","applicationUrl":"https://localhost:9999;http://localhost:9998","environmentVariables":{"ASPNETCORE_ENVIRONMENT":"Development"}}

以上で終了です。

実行するとブラウザで WebAPI より取得した json が表示されると思います。

最後に

今回使用したコマンドをまとめておきます。

apendix
dotnettoolupdate--globaldotnet-efdotnetaddpackageMicrosoft.EntityframeworkCore.DesigndotnetaddpackageMicrosoft.EntityframeworkCore.Sqlitedotnetefdbcontextscaffold"Data Source=wb.sqlite"Microsoft.EntityframeworkCore.Sqlite-oModelsdotnettoolinstall--globaldotnet-aspnet-codegeneratordotnetaddpackageMicrosoft.VisualStudio.Web.CodeGeneration.DesigndotnetaddpackageMicrosoft.EntityFrameworkCore.SqlServerdotnetaspnet-codegeneratorcontroller-namewbController-async-api-mWb-dcwbContext-outDirControllers

Viewing all articles
Browse latest Browse all 9703

Trending Articles