实体框架核心添加迁移失败

时间:2018-09-21 12:07:15

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

我正在尝试在项目中使用Ef Core。

在我不在WebApi.csproj现场使用EfCore的意义上,结构有所不同。实际上,我有一个不同的dll。和一个DependenciesResolver.dll处理我所有的依赖项注入。

在我的EfCore.dll中,我已经安装了

  

Microsoft.EntityFrameworkCore.Tools

     

Microsoft.EntityFrameworkCore.SqlServer

现在,当我尝试运行命令时(我正在运行的dll是EfCore.dll)

Add-Migration Name

我明白了:

  

在类“ Program”上访问IWebHost时发生错误。   没有应用程序服务提供商就继续进行。错误:对象   引用未设置为对象的实例。无法创建   “ StoreContext”类型的对象。添加一个实现   将“ IDesignTimeDbContextFactory”添加到项目,或查看   https://go.microsoft.com/fwlink/?linkid=851728了解其他模式   在设计时受支持。

sln的结构是这样的

WebApi | EfCore.dll | DependencyResolver.dll,我想保持这种方式,不想允许在我的WebApi中使用EfCore。

此问题的解决方案是什么?

如果这对EfCore.dll有帮助,我有这个。

 public sealed partial class StoreContext : DbContext, IStoreContext
    {
        private string _connectionString;

        public StoreContext(string connectionString) : base()
        {
            _connectionString = connectionString;

            Database.EnsureCreated();
        }

        /// db.tbls
        public DbSet<Order> Orders { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.AddOrderConfiguration();
        }

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

由DependencyResolver这样调用

        private DependenciesResolver RegisterInfrastructure()
        {
            _serviceCollection.AddScoped<StoreContext>(factory => new StoreContext(_connectionString));

            return this;
        }

然后由WebApi调用DependencyResolver

1 个答案:

答案 0 :(得分:3)

请查看以下内容:https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dbcontext-creation

该错误消息明确表明EF Core工具在设计时无法创建Context的实例。

如果您可以为StoreContext定义一个不带任何参数的构造函数,那么构造函数将不起作用,否则您需要通过定义实现IDesignTimeDbContextFactory接口的类来告诉工具如何在设计时创建上下文实例。