M J*_*M J 22 c# entity-framework-core asp.net-core-2.0
以下是我安装的软件包列表:已安装的软件包
我正在使用Entityframework核心2.0.我第一次使用实体框架代码成功创建了数据库第一次迁移(add-migration和update-database命令).现在,当我更新我的实体并尝试运行迁移时,它会给我以下错误.
无法创建"DataContext"类型的对象.将"IDesignTimeDbContextFactory"的实现添加到项目中,或者参阅https://go.microsoft.com/fwlink/?linkid=851728以获取在设计时支持的其他模式.
这是我的代码......
Program.cs中
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
Run Code Online (Sandbox Code Playgroud)
Startup.cs
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<>));
}
Run Code Online (Sandbox Code Playgroud)
DataContext.cs
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());
}
}
Run Code Online (Sandbox Code Playgroud)
gbj*_*anb 14
编辑:现在已经过时了.Microsoft 在9月底更新了他们的迁移文档,以显示如何更新,因此您不需要此解决方法.
正如我在github上提到的这个问题所示,你将数据库初始化代码移到Program main,将它放在BuildWebHost()和.Run()之间
一旦你理解了你需要var context = services.GetRequiredService<MyContext>();在Main 中使用DB上下文然后一切都按预期工作,它相对容易
.(虽然我仍然认为DB初始化是一次性初始化的事情,而不是每个程序运行的东西)
小智 6
只需更改我的Program.cs
由此
public class Program
{
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
Run Code Online (Sandbox Code Playgroud)
对此
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
Run Code Online (Sandbox Code Playgroud)
资料来源:https://wildermuth.com/2017/07/06/Program-cs-in-ASP-NET-Core-2-0