C#实体框架MVC第二次运行错误

时间:2015-06-23 11:56:21

标签: entity-framework asp.net-mvc-4 localdb

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

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();
    }

ComputerContext

 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; }
}

初始化课程

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);

感谢您提供任何帮助/建议

1 个答案:

答案 0 :(得分:1)

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

相反,您可以使用CreateDatabaseIfNotExistsDropCreateDatabaseIfModelChanges

public class ComponentDbInitialize : CreateDatabaseIfNotExists<ComputerContext>
{

}