概要
.netcore WebApp を使ったWebサービスのテンプレート作りの一環です。
コードファーストでEntityFramework を使って一からDBをつくる箇所をやる機会がなかったので
チュートリアルを実行しました。
環境
Windows10 Pro 1809
Visual studio 2019
.NETCore 2.1
Microsoftの公式チュートリアルを利用します。
Visual Studio 2017 を利用となってますが Visual Studio 2019でも問題ありませんでした。
> Visual Studio 2017 を開きます
> [ファイル] > [新規] > [プロジェクト]
> 左側のメニューから [インストール済み] > [Visual C#] > [.NET Core] の順に 選択します。
> [ASP.NET Core Web アプリケーション] を選択します。
> 名前に「EFGetStarted.AspNetCore.NewDb」を入力して [OK] をクリックします。
>[新しい ASP.NET Core Web アプリケーション] ダイアログで次の手順を実行します。
DBに作る項目は、Model Class を作成します。
Visual Studio では Modelをフォルダを作成(MVCモデルではすでに作成済み)してそのなかに入れます。
Models フォルダーを右クリックし、[追加] > [クラス] の順に選択します。
名前に「Model.cs」を入力して [OK] をクリックします。
このファイルの内容を次のコードに置き換えます。
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
namespace EFGetStarted.AspNetCore.NewDb.Models
{
public class BloggingContext : DbContext
{
public BloggingContext(DbContextOptions<BloggingContext> options)
: base(options)
{ }
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public ICollection<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
}
ASP.NER Core でDBのモデルを使えるようにするにはDI(Dependency injection )が必要です。
Startup.csから設定がいります。
using EFGetStarted.AspNetCore.NewDb.Models;
using Microsoft.EntityFrameworkCore;
次の強調表示されたコードが ConfigureServices メソッドに追加されます。
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
//ここ
var connection = @"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.AspNetCore.NewDb;Trusted_Connection=True;ConnectRetryCount=0";
services.AddDbContext<BloggingContext>
(options => options.UseSqlServer(connection));
// BloggingContext requires
// using EFGetStarted.AspNetCore.NewDb.Models;
// UseSqlServer requires
// using Microsoft.EntityFrameworkCore;
}
EntityFramework の CodeFirstで作った場合
Visual Studio のパッケージマネージャーコンソールで DBの反映をします
Add-Migration InitialCreate
参照:https://docs.microsoft.com/ja-jp/ef/core/managing-schemas/migrations/
これで、DBを作成するファイルが作成されます。
XXXXXXXXXXXXXX_InitialCreate.cs--メインの移行ファイル。 (Up() で) 移行を適用し、(Down() で) それを元に戻すために必要な操作が含まれます。
XXXXXXXXXXXXXX_InitialCreate.Designer.cs--移行メタデータ ファイル。 EF によって使用される情報が含まれます。
MyContextModelSnapshot.cs--現在のモデルのスナップショット。 次の移行を追加するときの変更内容の決定に使用されます。
続いて 次のコマンドを パッケージマネージャーコンソールに実行することで
databeseがUpdateされます。
Update-Database
実際にDBが作られたかどうかは
SQL Server Management Studio (SSMS) を使うと便利です。
https://docs.microsoft.com/ja-jp/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-2017
Qiita 記事だと
https://qiita.com/Nossa/items/d48fbe91ca470748a3d7
参考になります。
今回作ったサンプルをGithubに上げました。
https://github.com/yamuun/EFGetStarted.AspNetCore.NewDb