前回に引き続き「コードファーストに挑戦」の第2弾です。(前回の記事はこちら

前回はDB作成からテーブルの追加・変更について書きました。
今回は項目の名称や型の指定方法などについて記載します。

項目名と型の指定

プロパティにアノテーションを追記する事で項目と型とそのサイズを指定する事ができます。
NULLを許容しない場合は、「Required」を指定します。

    Private _Name As String
    <Column("name", TypeName:="nvarchar")>
    <StringLength(20)>
    <Required(ErrorMessage:="必須項目です")>
    Public Property Name As String
        Get
   :
   :
    End Property

当然ですが、プロパティの型がStringなのに、「Column(“name”, TypeName:=”int”)」 なんて指定するとマイグレーション時に怒られます。

注意したいのがDecimal型です。

    Private _Price As Decimal
    <Column("price", TypeName:="Decimal(10,0)")>
    Public Property Price As Decimal
        Get
   :
   :
    End Property

と指定しても、Decimal(18.2) で常に作られてしまいます。
困ったと悩んでいると。。。。

こちら

に答えがありました!感謝です。

その他はさほど苦労なくできました!

Keyの指定

テーブルにKeyを指定する方法ですが、プロパティ名を「id」にすると勝手にKeyになります。
ちなみに「abc_id」でも勝手にKeyになります。そうそう、常にIDENTITYです。

「id」が付かないプロパティ名をKeyにしたい場合は明示的に指定する必要があります。
また、そのKeyをIDENTITYにしたい場合も明示的に指定する必要があります。


Private _AbcCode As Integer <Key> <DatabaseGenerated(DatabaseGeneratedOption.Identity)> <Column("abc_code ", TypeName:="int")> Public Property AbcCode As Integer Get Return _AbcCode    :    : End Property

テーブルにマッピングしたくない場合

プロパティに定義したがテーブルにはマッピングしたくない場合は「NotMapped」を定義します。


Private _AbcCode As Integer <NotMapped> Public Property AbcCode As Integer Get Return _AbcCode    :    : End Property

SQLの出力

開発環境にテストデータが入っていたため、そのまま運用環境に持っていき動作確認を行いました。
その結果、予想通り追加の依頼などあり、テーブルも修正が入るのですが、そこで疑問・・・・

  「運用環境のDBにテーブルの修正部分をどうやって反映しよう??」

 案1:修正部分のDDLを手書して反映?
      ・・・・ これってコードファーストの精神に反していないか??
 案2:運用環境にVisualStudioを入れて反映
      ・・・・ いやいやあり得ない!

何かあるのでは? と探すとやっぱりありました。
パッケージマネージャで下記コマンドを流すと、指定したMigration名以降のDDLを吐き出してくれます。
これを運用環境のDBに流せば、開発環境と同じになります。

Update-Database -Script -SourceMigration:Migration名

まとめ

以上でコードファーストの簡単な説明を終わりますが、ソースとテーブルが常に一致の安心感は代えがたいものがあります。
また、項目の修正や追加も簡単なので覚えれば開発はスムーズに進みます。
ただ、テーブルを新規に作ったときがプロパティの順にテーブルの項目が作られますが、あとで追加したプロパティは必ずテーブルの最後の項目になります。
これをプロパティの順にしたい場合は、テーブルを削除して作り直す以外方法はないようです。

ではでは、次回は何にするかまだ決めてませんが、また今度!