Я создал простое консольное приложение, установил EntityFramework из nuget и выполнил команду Enable-Migrations.Entity Framework Migrations: Constructor Configuration всегда всегда
Вот код основной:
using(var ctx = new AppDbContext())
{
var persons = ctx.Persons.ToList();
Console.ReadKey();
}
Вот код класса конфигурации
internal sealed class Configuration : DbMigrationsConfiguration<AppDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
Console.WriteLine("Configuration: Constructor");
}
protected override void Seed(AppDbContext context)
{
Console.WriteLine("Configuration: Seed");
}
}
Вот рамки сущность часть в app.config:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
Если я запустил консольное приложение, то строится конструктор класса Configuration of Migrations. Зачем? Я не изменяю инициализатор базы данных.
Update
Я попытался теперь некоторые инициализаторы базы данных и посмотреть, если конструктор класса конфигурации называется. Вот мой результат:
public class AppDbContext : DbContext
{
static AppDbContext()
{
//Database.SetInitializer<AppDbContext>(new CreateDatabaseIfNotExists<AppDbContext>());
// ==> Configuration class constructor called
//Database.SetInitializer<AppDbContext>(new DropCreateDatabaseIfModelChanges<AppDbContext>());
// ==> Configuration class constructor called
//Database.SetInitializer<AppDbContext>(new DropCreateDatabaseAlways<AppDbContext>());
// ==> Configuration class constructor called
Database.SetInitializer<AppDbContext>(null);
// ==> Configuration class constructor is NOT called
}
public IDbSet<Person> Persons { get; set; }
}
Я устанавливаю инициализатор базы данных явно, но вызывается конструктор класса конфигурации. Странное поведение.
У вас включена автоматическая миграция? Вы получаете сообщение об ошибке? Возможно, вам нужно увидеть свой контекстный класс. –
Итак, вы говорите, что вы не используете Database.SetInitializers в любом месте? – Ruskin
Да, я не устанавливаю инициализатор базы данных, а не в app.config, а не в коде. – malt