在asp.netcore迁移中没有为此对象定义无参数构造函数

时间:2018-02-18 17:16:40

标签: asp.net-core asp.net-core-2.0 ef-migrations asp.net-core-mvc-2.0

我是ASP.NET Core的新手。使用VS Code学习新版本的.NET Core 2.0。我在使用迁移创建数据库时陷入困境。首先,它给出了IDesignTimeDbContextFactory实现的例外。解决这个问题之后,它仍然是

的例外
  

没有为此对象定义无参数构造函数

这是我的DbContextClass代码:

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

4 个答案:

答案 0 :(得分:1)

当我尝试使用ef核心时,我尝试了几种方法。我也遇到过类似的问题。最后我发现服务很好。首先,您需要使用以下覆盖构造函数创建DBContext

public VegaDbContext(DbContextOptions<VegaDbContext> options) : base(options)
{
}

在启动时,您可以将上下文添加为如下服务:

services.AddDbContext<ApplicationDBContext>(config => {
    config.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"));
});

您可以在此详细阅读依赖注入的工作原理: http://www.saxonica.com/saxon-js/documentation/index.html#!conformance/xslt30

这部分应该可以帮助您进行迁移。您可以使用dotnet ef命令https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection执行迁移。

使用db上下文时,请确保使用依赖注入,以便充分利用AddDbContext函数并将其保持干燥状态。

答案 1 :(得分:0)

https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro

如果我是你的,我会看看这份文件。

以下是您可以在此网站上找到的简单DbContext

namespace ContosoUniversity.Data
{
    public class SchoolContext : DbContext
    {
        public SchoolContext(DbContextOptions<SchoolContext> options) : base(options)
        {
        }

        public DbSet<Course> Courses { get; set; }
        public DbSet<Enrollment> Enrollments { get; set; }
        public DbSet<Student> Students { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Course>().ToTable("Course");
            modelBuilder.Entity<Enrollment>().ToTable("Enrollment");
            modelBuilder.Entity<Student>().ToTable("Student");
        }
    }
}

答案 2 :(得分:0)

我刚遇到同样的错误。如果您小心,错误说明实际上是在为您解决问题。 DesignTimeFactoryObject的构造函数不应使用参数。

public class ExampleDesignTimeFactory : IDesignTimeDbContextFactory<YourDBContext>{
public ExampleDesignTimeFactory(){ no constructor or no parameter constructor }
}

答案 3 :(得分:0)

我使用ASP.NET CORE 3.1创建项目并解决了