C# entity framework MVC 第二个 运行 错误

C# entity framework MVC second run error

我正在创建数据库并使用下面的代码初始化数据,如果数据库不存在,它会创建数据库并填充它,当我 运行 应用程序第二次出现错误

Cannot drop database "aspnet-app" because it is currently in use.

Application_start,带初始化

protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);

        Database.SetInitializer(new ComponentDbInitialize());
        ComputerContext context = new ComputerContext();
        context.Database.Initialize(true); //here it fails on second run
        context.SaveChanges();
    }

计算机上下文

 public ComputerContext():base("name=Default")
    {
    }
    public DbSet<Computer> Computers { get; set; }
    public DbSet<Motherboard> Motherboards { get; set; }
    public DbSet<CPU> CPUs { get; set; }
    public DbSet<Case> Cases { get; set; }
    public DbSet<HDD> HDDs { get; set; }
    public DbSet<RAM> RAMs { get; set; }
    public DbSet<GPU> GPUs { get; set; }
    public DbSet<PSU> PSUs { get; set; }
}

初始化class

public class ComponentDbInitialize : DropCreateDatabaseAlways<ComputerContext>
{
    protected override void Seed(ComputerContext context)
    {
        GetCpu().ForEach(p => context.CPUs.Add(p));
        GetGpu().ForEach(p => context.GPUs.Add(p));
        GetCase().ForEach(p => context.Cases.Add(p));
        GetHdd().ForEach(p => context.HDDs.Add(p));
        GetMb().ForEach(p => context.Motherboards.Add(p));
        GetPsu().ForEach(p => context.PSUs.Add(p));
        GetRam().ForEach(p => context.RAMs.Add(p));
        context.SaveChanges();
    }
private static List<CPU> GetCpu() .....
private static List<GPU> GetGpu().....
private static List<HDD> GetHdd()....
private static List<Case> GetCase()....
private static List<Motherboard> GetMb()....
private static List<PSU> GetPsu()....
private static List<RAM> GetRam()....

即使使用

我也会遇到同样的错误
context.Database.Initialize(false);

感谢任何help/advice

您的初始化程序正在使用 DropCreateDatabaseAlways class,正如它所暗示的那样,每次初始化应用程序时都会删除该数据库。

也许您可以使用 CreateDatabaseIfNotExistsDropCreateDatabaseIfModelChanges:

public class ComponentDbInitialize : CreateDatabaseIfNotExists<ComputerContext>
{

}