Entity Frameworkには、アノテーションでクラスに属性をつけてDBの定義を行う方法と、ContextクラスのOnModelCreatingメソッドでModelBuilderクラスを使ったFluentAPIの2種類の定義方法があります。 なんとなく、流れを見てる感じだとModelBuilderを使った定義方法が主流になっているように見えるのと、Entity Frameworkが提供している全機能にアクセスできるのはModelBuilderを使った機能のみっぽいです。
なので、ここでもModelBuilderを使った定義方法をちょっと見ていこうと思います。
エンテティの取得
まず、テーブルに関する情報を設定するためにModelBuilderのEntityメソッドを使ってエンテティに関する定義(テーブル単位の定義とみておk)をするクラスを取得します。これに対して色々な設定をしていきます。
// 例えばAddressクラスの定義をしようとする場合
var address = modelBuilder.Entity<Address>();
テーブル名の設定
テーブル名の設定はEntityで取得したクラスに対して、ToTableメソッドを呼び出すことで設定可能です。引数にテーブル名を渡します。2つ引数を渡すバージョンではスキーマ名を指定することもできます。
address.ToTable("Addresses");
列に関する設定
列に対して、最大長を設定したり、必須入力項目に設定することが出来ます。列の設定はPropertyメソッドで列を指定してから、設定を行います。HasMaxLengthで長さを指定して、IsRequiredで必須入力を設定できます。
var address = modelBuilder.Entity<Address>();
address.Property(x => x.City)
.HasMaxLength(512)
.IsRequired();
デフォルト値の設定もできますが、SQLiteではサポートされてないみたいでエラーになりました。
modelBuilder.Entity<Person>() .ToTable("People") .Property(x => x.Name) // 人類のデフォルト名は田中だ .HasDefaultValue("田中") .IsRequired();