私は Entity Framework (現在 EF6 ベータ版を使用) を学んでおり、既存のデータベースでコード ファースト パターンを使用しています。エンティティとDbContext
クラスは、T4 テンプレートを使用して自動的に作成されます。
DbContext
実行時にデータベースに何かを作成/変更しないようにしたいと思います。
どうやってやるの?
私は Entity Framework (現在 EF6 ベータ版を使用) を学んでおり、既存のデータベースでコード ファースト パターンを使用しています。エンティティとDbContext
クラスは、T4 テンプレートを使用して自動的に作成されます。
DbContext
実行時にデータベースに何かを作成/変更しないようにしたいと思います。
どうやってやるの?
コンテキストの初期化子を に設定しますnull
。
これにより、アプリケーションの起動時にデータベースが既存の状態のままになるはずです。
dbContext クラスやデータベース スキーマを変更した後にアプリケーションを実行しようとすると、例外が発生することに注意してください。これは、データベース スキーマがコンテキストが期待するものと一致しなくなるためです。
DBFirst と EF 6.1 でこの問題が発生し、EntityName に基づいて新しいテーブルが作成されました。そこで、OnModelCreating 仮想メソッドを変更してテーブルをマップしました。
したがって、EntityName の名前が MyStuffs である場合、デフォルトでは EnitityNames は複数形になっているため、EF 生成中に選択を解除するオプションがあります。私の場合、ウィザードは複数形のテーブルを生成していました。
public class MyContext: DbContext
{
public MyContext()
: base("name=MyEntityConnectionName")
{
}
public MyContext(string connectionString)
: base(connectionString)
{
}
#region methods
public static MyContext Create()
{
return new MyContext();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Map Entities to their tables.
modelBuilder.Entity<MyModel>().ToTable("MyStuff"); //prevent a new table from being added since we added a mapping
}
#endregion
public virtual DbSet<MyModel> MyEntities{ get; set; }
}