BETA

Visual StudioでSQL Serverに接続し、テーブルとカラムを作成するまで

投稿日:2018-12-06
最終更新:2018-12-06

Visual StudioからSQL Server LocalDBへ接続するためのアレコレ
SQL Server LocalDBとASP.NET Coreの使用(公式)

  1. 必要なソフトが入っているか確認

    • Microsoft SQL Server LocalDB
      Windowsメニューからプログラムと機能を開き、LocalDB等で検索する。
      なければMicrosoftの公式からDLしてインストールする。

    • SQL Server Data Tools
      リファレンスに従えばいい。
      VisualStudioがインストール済みの場合、VisualStudioInstallerを開き、"変更"を選択。
      ※VisualStudioの更新があるときは変更ボタンは右端の"詳細"プルダウンに移動するので注意。
      Workload画面で"Data strage and processing"にチェックがなければ未インストール。
      そのままインストールに進む。

  2. 有効なLocalDBの確認
    コマンドライン、もしくはVisualStudioのツール > NuGetパッケージマネージャー > パッケージマネージャーコンソールで、sqllocaldb infoを実行して有効なLocalDBがMSSQLLocalDBになっていることを確認する。

  3. VisualStudioでLocalDBインスタンス名の設定
    ツール > オプション > データベースツール > データベース接続 > SQL Server インスタンス名を、(LocalDB)\MSSQLLocalDBに設定。

  4. 新しい接続を作成する
    表示>サーバーエクスプローラー>データ接続を右クリック、接続の追加を選択
    データソースはMicrosoftSQLServerデータベースファイル。データベースファイル名はファイルを置きたい任意のディレクトリ下に拡張子.mdfのファイルを指定。現時点で存在しない場合もOKを押した時点で自動で作成されるので問題ない。
    OKを押した後、サーバーエクスプローラーに作成した.mdfファイルが表示されれば成功。
    右クリック > オプションで接続文字列を確認しておく。

※6まで工程を飛ばし、StartUp.csに接続文字列を指定することで、プロジェクトから直接スキーマを作成することもできる。デフォルトの.mdfファイルの作成場所はC:\Users\<user_name>\

  1. VisualStudioからSQLServerを確認する
    表示>SQLServerオブジェクトエクスプローラーを開き、SQL Server > (localdb)\MSSQLLocalDB~ > データベース.mdfファイル名と同名のスキーマが表示されている。

  2. DBを作成する準備
    新しいデータベースを利用したASP.NET CoreでのEF Coreの概要

    • モデルの作成
      プロジェクトのModels下にDB接続の役割を担うDBContextクラスと各テーブルに対応したModelクラスを準備する。
      以下はSampleテーブルを持つDBに接続するためのSampleContextクラス。
using Microsoft.EntityFrameworkCore;  

// 略  
    public class SampleContext : DbContext  
    {  
        public SampleContext (DbContextOptions<SampleContext> options) : base(options)  
        {  

        }  

        public DbSet<Sample> Samples { get; set;}  
    }  
}  

注意点として、PKが設定されていないとマイグレーションを実行する際にBuildエラーが発生する。
プロパティの命名規約に基づき、IdがつくプロパティはPKとして認識される。
idではPKとして自動認識されない。スネークケースやプロパティ名にIdが入らないものをPKに指定したい場合、FluentAPIを利用して明示的に主キーを指定する必要がある。
例えば、以下はsample_idを主キーにしたい場合。

// 略  
    public class SampleContext : DbContext  
    {  
        // 略  

        protected override void OnModelCreating(ModelBuilder modelBuilder)  
        {  
            modelBuilder.Entity<Sample>()  
                        .HasKey(b => b.sample_id)  
                        .HasName("PrimaryKey_smaple_id");  
        }  
    }  
}  

Sampleモデル。

public class Sample  
{  
    public int sample_id { get; set; }  
    public string sample_data { get; set; }  
}  

未確認だが、ここによれば属性タグ([Key],[ForeignKey("")])で主キー外部キーの指定も可能?
こちらのほうが簡潔で分かりやすい。

public class Sample  
{  
    [Key]  
    public int sample_id { get; set; }  
    public string sample_data { get; set; }  
}  
- プロジェクトで使用するDBを依存関係挿入に登録  

StartUp.csにプロジェクトで使用するDBを登録する。
リファレンスにはusingの2つを入れるとConfigureServices内は自動補完されるように書かれているが、自動で入らないので手入力する。
var connectionには4で確認した接続文字列のServer=から下を入れる。

using EFGetStarted.AspNetCore.NewDb.Models;  
using Microsoft.EntityFrameworkCore;  

// 略  
    public void ConfigureServices(IServiceCollection services)  
    {  
        // 略  
        var connection = @"Server=(LocalDB)\MSSQLLocalDB;~";  
        services.AddDbContext<SampleContext>(options => options.UseSqlServer(connection);  
    }  
// 以下略  
  1. MigrationでDBを作成する
    NuGetパッケージマネージャー > パッケージマネージャーコンソールを開いて以下の工程を行う。

    • Migrationファイルの作成

      Add-Migration InitialCreate  

      プロジェクト内にMigrationディレクトリが作成され、Contextを元にMigrationファイルが作成される。

    • Migrationファイルを元にDatabaseを作成

      Update-Database InitialCreate  

      表示 > SQLServerオブジェクトエクスプローラーから、作成したスキーマ内にSampleテーブルとsample_id,sample_dataカラムが表示されていれば成功。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@showyleeの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!