首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在asp.net-core-2.0中向项目中添加'IDesignTimeDbContextFactory<DataContext>‘的实现

如何在asp.net-core-2.0中向项目中添加'IDesignTimeDbContextFactory<DataContext>‘的实现
EN

Stack Overflow用户
提问于 2017-08-26 13:45:03
回答 11查看 32.4K关注 0票数 26

下面是我安装的包的列表:Installed Packages

我使用的是Entityframework核心2.0。我第一次使用实体框架代码优先迁移(add-migration和update-database命令)成功地创建了数据库。现在,当我更新我的实体并尝试运行迁移时,它给出了以下错误。

无法创建类型为“DataContext”的对象。将“IDesignTimeDbContextFactory”的实现添加到项目中,或查看https://go.microsoft.com/fwlink/?linkid=851728以了解设计时支持的其他模式。

这是我的代码。

Program.cs

代码语言:javascript
复制
public static void Main(string[] args)
{
    BuildWebHost(args).Run();
}

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

Startup.cs

代码语言:javascript
复制
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)
{
    // Repositories

    services.AddMvc();
    services.AddDbContextPool<DataContext>(
        options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
        //options => options.UseSqlServer(@"Server=LAPTOP-518D8067;Database=Gyanstack;Trusted_Connection=True;MultipleActiveResultSets=true"));

    services.AddCors();
    services.AddScoped<ISectionRepository, SectionRepository>();
    services.AddScoped(typeof(IEntityBaseRepository<>), typeof(EntityBaseRepository<>));
}

DataContext.cs

代码语言:javascript
复制
public class DataContext : DbContext
{
    public DataContext(DbContextOptions<DataContext> options) 
        : base(options)
    { }

    public DbSet<Section> Section { get; set; }
    public DbSet<SubSection> SubSection { get; set; }
    public DbSet<Article> Article { get; set; }
    public DbSet<Comment> Comment { get; set; }
    public DbSet<User> User { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.AddConfiguration(new SectionMap());
        modelBuilder.AddConfiguration(new SubSectionMap());
        modelBuilder.AddConfiguration(new ArticleMap());
        modelBuilder.AddConfiguration(new CommentMap());
    }
}
EN

回答 11

Stack Overflow用户

发布于 2017-08-27 21:07:01

编辑:现在已过时。Microsoft updated their migration document在9月底向您展示了如何更新,因此您不需要此解决方法。

如此issue I raised on github所示,您将DB初始化代码移动到Program main,将其放在BuildWebHost()和.Run()之间。

一旦您理解了需要在Main中使用var context = services.GetRequiredService<MyContext>();获取DB上下文,这就相对容易了,然后一切都会按预期工作。(虽然我仍然认为DB初始化是一次性初始化的事情,而不是每个程序运行的事情)

票数 15
EN

Stack Overflow用户

发布于 2017-11-09 19:07:27

简单地更改了我的Program.cs

从这里开始

代码语言:javascript
复制
public class Program
{
  public static void Main(string[] args)
  {
    var host = new WebHostBuilder()
      .UseKestrel()
      .UseContentRoot(Directory.GetCurrentDirectory())
      .UseIISIntegration()
      .UseStartup<Startup>()
      .Build();

    host.Run();
  }
}

到这个

代码语言:javascript
复制
public class Program
{
  public static void Main(string[] args)
  {
    BuildWebHost(args).Run();
  }

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

来源:https://wildermuth.com/2017/07/06/Program-cs-in-ASP-NET-Core-2-0

票数 6
EN

Stack Overflow用户

发布于 2017-10-05 20:47:01

在2.0项目中,将SeedData.Initialize调用移动到Program.cs的Main方法

代码语言:javascript
复制
var host = BuildWebHost(args);

using (var scope = host.Services.CreateScope())
{
    var services = scope.ServiceProvider;

    try
    {
        SeedData.Initialize(services, "").Wait();
    }
    catch (Exception ex)
    {
        var logger = services.GetRequiredService<ILogger<Program>>();
        logger.LogError(ex, "An error occurred seeding the DB.");
    }
}

host.Run();   

参考:https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/#move-database-initialization-code

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45892312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档