EF Core 2.1-无法创建“ MyAppContext”类型的对象。将“ IDesignTimeDbContextFactory <myappcontext>”的实现添加到项目中,

时间:2018-12-12 10:05:35

标签: c# entity-framework asp.net-core-2.1 ef-core-2.1

我将ASP.Net Core 2.1EF 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 :(得分:1)

您在数据库类中没有没有参数的公共构造函数,因此您需要告诉编译器如何创建数据库实例。

只需添加一个新类:

    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");