4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

2019年 EntityFramework を使って .netcore webapp のDBを作る

Last updated at Posted at 2019-05-02

概要

.netcore WebApp を使ったWebサービスのテンプレート作りの一環です。

コードファーストでEntityFramework を使って一からDBをつくる箇所をやる機会がなかったので
チュートリアルを実行しました。

環境

Windows10 Pro 1809
Visual studio 2019
.NETCore 2.1

参考文献:
https://docs.microsoft.com/ja-jp/ef/core/get-started/aspnetcore/new-db?toc=%2Faspnet%2Fcore%2Ftoc.json&bc=%2Faspnet%2Fcore%2Fbreadcrumb%2Ftoc.json&view=aspnetcore-2.2&tabs=visual-studio

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

image.png

Qiita 記事だと
https://qiita.com/Nossa/items/d48fbe91ca470748a3d7
参考になります。

今回作ったサンプルをGithubに上げました。
https://github.com/yamuun/EFGetStarted.AspNetCore.NewDb

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?