tekitoumemo’s diary

思ったことを書くだけ。長文版Twitter

【.NET Core, Azure SQL Server】ubuntuを使って.NET CoreでAzure Databaseを扱う

前回は.NET Coreをubuntuで動かすものを記事にしました。今回はubuntu上で.NET Coreを使ってAzure Databaseを動かせるかという検証です。ubuntuに.NET Coreを動かす場合は以下を参考にしてください。
tekitoumemo.hatenablog.com

僕の持ってるサブPCはポンコツSQL Serverを入れたらパンクしちゃいます。メモリが3.25G以上が推奨ってもう無理じゃん。。
tekitoumemo.hatenablog.com
qiita.com


AzureDatabaseで動かして開発できたらポンコツPCでもなにかと使える!と思って検証しました。また、ubuntu上でAzure SQL Serverを動かすにはどんな作業が必要なのかの検証も含め、実施しました。結果

楽勝でした

はい。

Azure Databaseを作成します。

[SQLデータベース]をクリック→[SQLデータベースの作成]をクリック
f:id:tekitoumemo:20180322004602p:plain

必要な情報を入力します。

これらは任意の情報を入力してください。

  • サーバー

Azure SQL Serverはデータベースのサーバーを構築しなければいけないのでこちらの設定を行います。
こちらも任意の情報を入力してください。
f:id:tekitoumemo:20180322005319p:plain

  • SQLエラスティックプール

こちらは大規模なDBでスケーリングするときの予算や規模の設定が出来ます。今回は検証なので「いいえ」にしておきます。

  • 価格レベル

超知りたいところですね。SingleDatabaseだとBasic、Standard、Preniumの3つがあるので、今回はBasicにします。2G使えて、東日本リージョンで月額600円代です。Standardの250Gが使えるプランでも月額1800円程度なのでめっちゃ安いです。以下の計算ツールで計算出来ます。
azure.microsoft.com

これらの情報を入力したら作成します。ものの5分で作成出来ます。

.Net Coreの準備をします。

今回はEntity Framework Coreを使います。めっちゃ雑ですが、Githubにサンプルを載っけてるので参考になればと思います。
github.com

onConfigメソッドを作成します。
using Microsoft.EntityFrameworkCore;
using System.Data.SqlClient;

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
            // 接続文字列を指定する
            var connectionString = "";
            optionsBuilder.UseSqlServer(connectionString);
}

Nugetから「Microsoft.EntityFrameworkCore」、「System.Data.SqlClient」をインストールして下さい。接続文字列はAzure Portalに記載されています。真っ赤にぬりつぶされたところに記載されています。
f:id:tekitoumemo:20180322012402p:plain

モデルとモデルをマッピングする処理を記載します。
public DbSet<Test> _test { get; set; }
public class Test
{
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime CreateTime { get; set; }
        public Nullable<DateTime> UpdateTime { get; set; }
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
        // テーブルにマッピングする
        modelBuilder.Entity<Test>().ToTable("Test");
}

modelBuilder.Entityにジェネリックでモデルを指定し、ToTableの引数にテーブル名を指定します。その他、モデルクラスとプロパティを設定します。

呼び出しの実装を行います。
using (var dbContext = new AppDbContext())
{
        var test = dbContext._test.ToList(); 
}

これで一通り完成です。

それではVSCodeデバッグしてみます。
f:id:tekitoumemo:20180322013803p:plain
例外が発生しました。このIPアドレスは接続出来ないよ!ってエラーです。Azure Databaseではファイアウォールが設定されているので接続するIPを除外してあげなければいけません。

ファイアウォールの設定を行います。
f:id:tekitoumemo:20180322014403p:plain
[概要]→[サーバーファイアウォールの設定]をクリックします。
f:id:tekitoumemo:20180322014642p:plain
[クライアントIPの追加]を押下します。先ほどアクセスしたので、そのまま設定が出来ます。もちろん、手動で入力することも出来ます。

設定が完了したら再度、接続してみます。
f:id:tekitoumemo:20180322015133p:plain
ちゃんとデータが取れました!

これで、ubuntu上で.Net Coreの開発がまともにできるようになりました。やっとこれでリビングで寝っ転がりながら開発ができる!