代码之家  ›  专栏  ›  技术社区  ›  Kgn-web

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

  •  0
  • Kgn-web  · 技术社区  · 6 年前

    ASP.Net Core 2.1 具有 EF 2.1 这就是我的上下文类的样子

     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; }
    }
    

     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();
        }
    }
    

    程序.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 回复  |  直到 6 年前
        1
  •  3
  •   Miamy Dan Barrett    6 年前

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

    只需添加一个新类:

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