EntityFrameworkCore で SQL Server の IDENTITY プロパティを使うときの注意点

EntityFrameworkCoreのバージョンは v2.0.1。

例えば次のようなテーブルがあるとする。

create table Entry (
    Id bigint identity(1,1) not null,
    Title nvarchar(100) not null,
    Body nvarchar(max) null,

  constraint pk_Entry primary key clustered 
  (
      Id asc
  )
)

このテーブルにマッピングする C# のクラスはこんな感じ。

public class Entry
{
    public long Id { get; set; }
    public string Title { get; set; }
    public string Body { get; set; }
}

EntityFrameworkCore の Fluent API で、クラスとテーブルをマッピングする。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Entry>()
        .Property(e => e.Id)
        .UseSqlServerIdentityColumn();
    modelBuilder.Entity<Entry>()
        .Property(e => e.Title)
        .IsRequired();
    modelBuilder.Entity<Entry>()
        .Property(e => e.Body);
}

これでいいと思っていたけど、実際に動かしてみるとダメだった。 UPDATE 時に Id を更新しようとしてしまい、SqlException 発生。死亡。

Id を更新しないように設定してあげないといけなかった。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Entry>()
        .Property(e => e.Id)
        .UseSqlServerIdentityColumn()
        .Metadata.AfterSaveBehavior = PropertySaveBehavior.Ignore; // Id 列を更新しないようにする
    modelBuilder.Entity<Entry>()
        .Property(e => e.Title)
        .IsRequired();
    modelBuilder.Entity<Entry>()
        .Property(e => e.Body);
}

最初、ドキュメントを探しても解決方法を見つけることができず途方に暮れたが、 GitHub リポジトリに登録されているイシューを見つけることができた。 嵌ったときはイシューも見る。これ大事。

『星野、目をつぶって。(9)』を読んだ

小早川はバイトという新しい世界に足を踏み出し、 加納も松方と和解するために漫画のことを理解しようと積極的に行動し、 そんな加納の影響を受けて松方も歩み寄りの姿勢を見せたりと、 皆変わるために前に進み始めはじめた。 ただ一人、星野を除いて。星野だけは、小早川との関係は隠したままだし、素顔も隠したままだしと、いっこうに変われずにいる。 小早川はもう自分で自分を肯定できるようになったし、次は星野にフォーカスが移りそう。

あと新キャラの小宮はフリーダム過ぎて好きにはなれないな。小早川と星野にちょっかいを出すためだけに登場したのかと勘ぐってしまう。周りにハブられていると分かっておきながら、自分を変えずに本能のまま行動し続けるのは、なんだかなぁって思った。

『かぐや様は告らせたい(8)』を読んだ

8巻はひさしぶりに全部日常回で、安定した面白さだった。特に生徒会新メンバーの伊井野ミコが良い。前期メンバーには、会長やかぐやに辛辣なツッコミを入れる役割が不在だったので、彼女の存在は貴重。会長に「くずめ」なんて言えるのはミコだけだろう。良いアクセントになっている。

あと、かぐやと早坂のコンビも面白い。 早坂にからかわれるかぐやは、生徒会メンバーの前とは違った表情を見せて良い。早坂の方も、かぐやに振り回されて、キャラに綻びがでるところが面白い。主人が無自覚に恥をさらすのに耐えるところとか特に。この2人セットでの出番がもっと見たい。

ASP.NET Core MVC アプリケーションの Docker コンテナを Heroku で動かしてみた

以前、最小の ASP.NET Core アプリケーションの Docker コンテナを Heroku で動かせた。

ただ、ASP.NET Core MVC アプリケーションでは、Heroku 上で NuGet パッケージの復元を実行しようとしていて失敗。

NuGet パッケージの復元で失敗するのなら、復元の必要が無いように、発行したアプリから Docker イメージを作ってしまえばいいかもしれない。

再挑戦してみる。

Heroku CLI をインストール

新しい MacBook Pro に Heroku CLI が入ってなかったので、Homebrew でインストールする。

brew install heroku/brew/heroku

Heroku にログイン

heroku login
heroku container:login

ASP.NET Core MVC プロジェクトを作成

最小の ASP.NET Core MVC アプリケーションの Docker イメージを作りたいので、dotnet new コマンドで生成された雛形をそのまま使う。

mkdir HelloAspNetCore
cd HelloAspNetCore
dotnet new mvc

ASP.NET Core MVC プロジェクトを発行

dotnet publish -c Release

を実行すると、./bin/release/netcoreapp2.0/ 下に実行に必要なファイルがすべて出力される。

Docker ファイルを作成

ファイル一式が出力されたディレクトリに Docker ファイルを作成する。

cd ./bin/release/netcoreapp2.0/publish

ディレクトリの中身をコピーして、ASP.NET Core アプリケーションを起動する Docker ファイルを書く。 ポートは Heroku から環境変数で渡される値を使う。

FROM microsoft/aspnetcore

WORKDIR /app

COPY . .

CMD ASPNETCORE_URLS=http://*:$PORT dotnet HelloAspNetCore.dll

Docker イメージを作成

docker build -t <イメージ名> .

Docker イメージに Heroku 用のタグを設定

Heroku アプリは事前に作成しておいたものを使っておく。

docker tag <イメージ名> registry.heroku.com/<Heroku アプリ名>/web

Heroku にデプロイ

Heroku が用意したレジストリにプッシュすると、Heroku 上で実行される。

docker push registry.heroku.com/<Heroku アプリ名>/web

確認

Web ブラウザでアプリの URL にアクセスすると、今回はちゃんとおなじみのページを表示できた。

f:id:griefworker:20180114061917p:plain

ASP.NET Core MVC アプリケーションの Docker コンテナを Heroku で動かすのはこの方法で良さそうだ。次の課題は Heroku Postgres の利用だな。

bills 福岡

西中洲の SHIP'S GARDEN にある『bills 福岡』にようやく行くことができた。土曜日の13時過ぎに行ったら、すんなり席に座れたので、ブームはだいぶ落ち着いたみたいだ。

お目当は、世界一の朝食と称される bills のスクランブルエッグと、リコッタパンケーキ。 スクランブルエッグは素材を生かしたシンプルな味付け。塩胡椒を適度にかけていただく。リッチな気分に浸れる一皿だった。

リコッタパンケーキは非常にふわとろ。そしてボリュームもある。この量を自分一人で完食するのは難しい。 シェアにしておいてよかった。 ハニーコームバターが適度に上品な甘さで、たっぷり塗って食べたら美味いんだなこれが。 パンケーキの店と勘違いされるのも納得。現時点で、自分の中のパンケーキランキング1位。

全体的に値段が高めて、お会計はとてもランチとは思えない金額になったけど、それもまぁ仕方ないと思える味だった。 特にパンケーキは満足度高い。

bills 福岡

食べログ bills 福岡

鳳凛

一蘭が値上げにつぐ値上げで、1杯890円替玉190円という値段になったので、とうとう見切りをつけた。 ポスト一蘭として白羽の矢を立てたのは、福岡市中央区春吉にある『鳳凛』。 10年ぶりくらいに行ってみた。

この店は一蘭とルーツが同じらしい。 というか、むしろこちらが正統。 その本家本元の唐辛子入り『ラーメン(690円)』を注文。

スープは臭みが全くない、まろやかで飲みやすいとんこつ。和食を研究して生まれたらしい。どうりで、他のとんこつラーメンとは一線を画していると思った。中央に浮ぶタレを溶かすと、辛さと旨さ、あとほのかな甘さが広がっていって、さらに美味い。麺は細麺で、一蘭とは一番の違いかな。

一蘭総本店は外国人観光客ばっかりになってるけど、旅行に来る人たちの自国の物価と比べると、あの値段でもまだ普通と思うのかもしれない。自分は流石に無理。鳳凛はランチタイムの替玉が30円で、ラーメンとあわせて720円。一蘭と比べて圧倒的コスパ。個人的に、味は今のところ一蘭の上位互換なので、今後は鳳凛を贔屓しよう。

鳳凛

食べログ 鳳凛

支那そば やっちゃんち

福岡市中央区平尾にある『支那そば やっちゃんち』に行ってみた。ここは朝にラーメンを食べる朝ラーを提唱していて、朝7時から営業開始という、ちょっと変わったお店。

醤油にするか塩にするか、ギリギリまで迷ったけど、初めてなので醤油を選択。

朝ラーを提唱しているだけあり、スープはあっさりとしていて、ほっとするというか落ち着く。これは確かに朝でも余裕で食べられる。もちろん、呑みのシメでもイケる。麺は慶史のもので、中太のやや縮れ。弾力あるしスープにも良く絡むしで美味い。いろんな店で採用されるのもわかる。

具にお麩が入ってるのも変わっているが、それ以外は正統派の支那そばだった。今度は塩も食べに来たいと思う。

関連ランキング:ラーメン | 西鉄平尾駅