У меня есть существующая таблица в моей базе данных, и я хочу создать несколько дополнительных таблиц, используя Code First / Fluent API (каким бы способом вы ни захотели классифицировать его).Вот мое DbContext
:
public class MyContext : DbContext
{
public DbSet<Entity1> Entities1 { get; set; }
public DbSet<Entity2> Entties2 { get; set; }
public MyContext() : base(@"data source=....;")
{}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer(new MyContextInitializer());
modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
modelBuilder.Configurations.Add(new Entity1Configuration());
modelBuilder.Configurations.Add(new Entity2Configuration());
}
}
Пройдя по некоторым вопросам здесь и некоторым постам в блоге, я нашел следующий способ, предложенный для создания несуществующих таблиц:
public class MyContextInitializer : CreateDatabaseIfNotExists<MyContext>
{
protected override void Seed(MyContext context)
{
context.Database.ExecuteSqlCommand(_mainTable);
context.Database.ExecuteSqlCommand(_relationTable);
base.Seed(context);
}
private readonly string _mainTable=@"create table ...";
private readonly string _relationTable=@"create table ...";
}
НоSeed
метод в MyContextIntializer
не вызывается, возможно, база данных уже существует.Если переместить операторы ExecuteSqlCommand
в оператор OnModelCreating
в MyContext
, я получу следующую ошибку:
The context cannot be used while the model is being created.
Какие у меня есть другие варианты, кроме запуска SQL непосредственно в SQL Management Studio для создания таблиц?