entity-framework-migrationsasp.net-core-2.1

How to use IDesignTimeDbContextFactory implementation in ASP.NET Core 2.1?


I have ASP.NET Core 1.1 project, which I'm trying to convert to v2.1.

I've found IDesignTimeDbContextFactory implementation, but I don't understand where I should create the instance of this factory and how to use it for migrations normal working. Now before create/remove migration I must clean and rebuild solution, because if not, I will get this message:

Unable to create an object of type 'MyDbContext'. Add an implementation of 'IDesignTimeDbContextFactory' to the project, or see https://go.microsoft.com/fwlink/?linkid=851728 for additional patterns supported at design time

All context data is in separated project. How can I use the IDesignTimeDbContextFactory implementation or what am I doing wrong?


Solution

  • Add this class to folder where you have your DbContext.

    public class MyDbContextFactory : IDesignTimeDbContextFactory<MyDbContext>
        {
    
            MyDbContext IDesignTimeDbContextFactory<MyDbContext>.CreateDbContext(string[] args)
            {
                IConfigurationRoot configuration = new ConfigurationBuilder()
                    .SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile("appsettings.json")
                    .Build();
    
                var builder = new DbContextOptionsBuilder<MyDbContext>();
                var connectionString = configuration.GetConnectionString("DefaultConnection");
    
                builder.UseSqlServer(connectionString);
    
                return new MyDbContext(builder.Options);
            }
        }