EF Core 2.1 - Невозможно создать объект типа «MyAppContext».Добавьте в проект реализацию IDesignTimeDbContextFactory <MyAppContext>, - PullRequest
0 голосов
/ 12 декабря 2018

Я использую ASP.Net Core 2.1 с EF 2.1 Вот так выглядит мой класс Context *

 public class MyAppContext
    : DbContext
{
    private string _dbConnection = @"Data Source=myServer;Database=SampleApp;uid=sa;password=******";
    public MyAppContext(DbContextOptions<MyAppContext> options)
        : base(options)
    {

    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("app");
        base.OnModelCreating(modelBuilder);
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(_dbConnection);
        base.OnConfiguring(optionsBuilder);
    }

    public DbSet<User> Users { get; set; }
    public DbSet<Phone> Phones { get; set; }
}

Вот так выглядит мой StartUp.cs & Program.cs

 public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseMvc();
    }
}

Program.cs

 public class Program
{

    public static void Main(string[] args)
    {
        BuildWebHost(args).Build().Run();
    }

    public static IWebHostBuilder BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();

}}

Я проверил следующие ссылки: -

и несколько других.

Но большинство из них были при миграции 1.x в 2.x, но это мое новое приложение.Нет миграций

Как мне исправить эту ошибку ??

Спасибо.

1 Ответ

0 голосов
/ 12 декабря 2018

У вас нет общедоступного конструктора без параметров в вашем классе базы данных, поэтому вам нужно указать компилятору, как создать экземпляр вашей базы данных.

Просто добавьте новый класс:

    internal class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<MyAppContext>
    {
        public MyAppContext CreateDbContext(string[] args)
        {
            var builder = new DbContextOptionsBuilder<MyAppContext>();
            builder.UseSqlServer(_dbConnection);
            var context = new MyAppContext(builder.Options);
            return context;
        }
    }

Редактировать

Вот пример того, как получить _dbConnection для настольного приложения.

var currentDir = Directory.GetCurrentDirectory();
var configBuilder = new ConfigurationBuilder();
configBuilder.SetBasePath(currentDir);
configBuilder.AddJsonFile("appsettings.json");
var config = configBuilder.Build();
_dbConnection = config.GetConnectionString("DefaultConnection");
...