Я хотел создать таблицу во время запуска с Entity Framework. У меня есть контекст в отдельном проекте.
Startup.cs в методе: Настройка (приложение IApplicationBuilder)
try
{
using (var scope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
{
scope.ServiceProvider.GetRequiredService<MyContext>().Database.Migrate();
}
}
catch (Exception ex)
{
throw;
}
Этот кусок кода не создает таблицу.
Однако, когда я пытался создать миграцию с помощью
dotnet ef migrations add AddTable_CLient -c MyContext
. Таблица создается, но
scope.ServiceProvider.GetRequiredService<MyContext>().Database.Migrate();
не создает таблицу для меня. И это показывает, что таблица уже создана.
public class DesignTimeDbContextFactory: IDesignTimeDbContextFactory<VerittyContext>
{
public MyContext CreateDbContext(string[] args)
{
var builder = new DbContextOptionsBuilder<MyContext>();
builder.UseSqlServer("Server=localhost;Database=ClientManagement;Trusted_Connection=True;MultipleActiveResultSets=true",
optionsBuilder => optionsBuilder.MigrationsAssembly(typeof(MyContext).GetTypeInfo().Assembly.GetName().Name));
return new VerittyContext(builder.Options);
}
}
MyContext.cs
public DbSet<Company> Company { get; set; }
public DbSet<CompanyContact> CompanyContact { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
{
relationship.DeleteBehavior = DeleteBehavior.Restrict;
}
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Company>();
modelBuilder.Entity<CompanyContact>();
}
Я хотел, чтобы таблица создавалась автоматически при добавлении таблицы в класс Context. Я не хотел добавлять миграцию вручную. Разве использование кода ниже не является способом автоматического добавления таблицы в базу данных?
using (var scope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
{
scope.ServiceProvider.GetRequiredService<MyContext>().Database.Migrate();
}
Пожалуйста, помогите.