はじめに
この記事では.NET Core 3.1をつかってオーオースを学習する方法を書いてみます。
実行環境
下記バージョンで動作確認しています。
- MacOS
- .NET Core 3.1
% dotnet --version
3.1.101
学習方針
コマンドプロンプトから実行する事で、Windows、Linuxにおいてもそのままできると思います。
% mkdir myop
% cd myop
% dotnet new mvc
必要なツールをインストールします。
% dotnet tool install --global dotnet-ef
% dotnet tool install --global dotnet-aspnet-codegenerator
% dotnet tool list --global
必要なパッケージをインストールします。
% dotnet add package Microsoft.EntityFrameworkCore.Sqlite
% dotnet add package Microsoft.EntityFrameworkCore.Design
% dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
% dotnet add package Microsoft.EntityFrameworkCore.SqlServer
Clients、Tokens、Usersモデルを作成します。
Models/Tables.cs
usingSystem;usingSystem.ComponentModel;usingSystem.Collections.Generic;usingMicrosoft.EntityFrameworkCore;namespacemyop.Models{publicclassmyopContext:DbContext{// public myopContext (DbContextOptions options) : base(options) {}publicDbSet<Client>Clients{get;set;}publicDbSet<Token>Tokens{get;set;}publicDbSet<User>Users{get;set;}protectedoverridevoidOnConfiguring(DbContextOptionsBuilderoptions)=>options.UseSqlite("Data Source=myop.db");}publicclassClient{[DisplayName("client_id")]publicstringClientId{get;set;}[DisplayName("client_secret")]publicstringClientSecret{get;set;}[DisplayName("access_type")]publicstringAccessType{get;set;}[DisplayName("redirect_uri")]publicstringRedirectUri{get;set;}[DisplayName("grant_type")]publicstringGrantType{get;set;}[DisplayName("allowed_scope")]publicstringAllowedScope{get;set;}}publicclassToken{[DisplayName("user_id")]publicstringId{get;set;}[DisplayName("access_token")]publicstringAccessToken{get;set;}[DisplayName("expires_in")]publicintExpiresIn{get;set;}[DisplayName("token_type")]publicstringTokenType{get;set;}[DisplayName("scope")]publicstringScope{get;set;}[DisplayName("iat")]publicDateTimeIat{get;set;}}publicclassUser{[DisplayName("user_id")]publicstringId{get;set;}[DisplayName("password")]publicstringPassword{get;set;}}}モデルからデータベースを生成します。今回データベースにはSQLiteを使います。
% dotnet ef migrations add InitialCreate
% dotnet ef database update
テスト用なのでポート番号は5000のみで良いと思います。
Properties/launchSetting.json
{"iisSettings":{"windowsAuthentication":false,"anonymousAuthentication":true,"iisExpress":{"applicationUrl":"http://localhost:38239","sslPort":44320}},"profiles":{"IIS Express":{"commandName":"IISExpress","launchBrowser":true,"environmentVariables":{"ASPNETCORE_ENVIRONMENT":"Development"}},"myop":{"commandName":"Project","launchBrowser":true,"applicationUrl":"http://localhost:5000","environmentVariables":{"ASPNETCORE_ENVIRONMENT":"Development"}}}}スキャフォールドでデータベースを確認してみます。
% dotnet aspnet-codegenerator controller -name ClientsController -m Client -dc myopContext --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries
% dotnet aspnet-codegenerator controller -name TokensController -m Token -dc myopContext --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries
% dotnet aspnet-codegenerator controller -name UsersController -m User -dc myopContext --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries
ソースコードを一部修正して実行します。これでClients、Tokens、UsersがMVCで登録できます。
http://localhost:5000/Clients/
http://localhost:5000/Tokens/
http://localhost:5000/Users/
Startup.cs
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;usingMicrosoft.AspNetCore.Builder;usingMicrosoft.AspNetCore.Hosting;usingMicrosoft.AspNetCore.HttpsPolicy;usingMicrosoft.Extensions.Configuration;usingMicrosoft.Extensions.DependencyInjection;usingMicrosoft.Extensions.Hosting;usingmyop.Models;usingMicrosoft.EntityFrameworkCore;namespacemyop{publicclassStartup{publicStartup(IConfigurationconfiguration){Configuration=configuration;}publicIConfigurationConfiguration{get;}// This method gets called by the runtime. Use this method to add services to the container.publicvoidConfigureServices(IServiceCollectionservices){services.AddDbContext<myopContext>(options=>options.UseSqlite("Data Source=myop.db"));services.AddControllersWithViews();}(省略)Models/Tables.cs
usingSystem;usingSystem.ComponentModel;usingSystem.Collections.Generic;usingMicrosoft.EntityFrameworkCore;namespacemyop.Models{publicclassmyopContext:DbContext{publicmyopContext(DbContextOptionsoptions):base(options){}publicDbSet<Client>Clients{get;set;}publicDbSet<Token>Tokens{get;set;}publicDbSet<User>Users{get;set;}// protected override void OnConfiguring(DbContextOptionsBuilder options)// => options.UseSqlite("Data Source=myop.db");}publicclassClient{[DisplayName("client_id")]publicstringClientId{get;set;}[DisplayName("client_secret")]publicstringClientSecret{get;set;}[DisplayName("access_type")]publicstringAccessType{get;set;}[DisplayName("redirect_uri")]publicstringRedirectUri{get;set;}[DisplayName("grant_type")]publicstringGrantType{get;set;}[DisplayName("allowed_scope")]publicstringAllowedScope{get;set;}}publicclassToken{[DisplayName("user_id")]publicstringId{get;set;}[DisplayName("access_token")]publicstringAccessToken{get;set;}[DisplayName("expires_in")]publicintExpiresIn{get;set;}[DisplayName("token_type")]publicstringTokenType{get;set;}[DisplayName("scope")]publicstringScope{get;set;}[DisplayName("iat")]publicDateTimeIat{get;set;}}publicclassUser{[DisplayName("user_id")]publicstringId{get;set;}[DisplayName("password")]publicstringPassword{get;set;}}}