Asp.net mvc 如何防止在没有种子设定的情况下重新创建数据库?

Asp.net mvc 如何防止在没有种子设定的情况下重新创建数据库?,asp.net-mvc,database,Asp.net Mvc,Database,我希望防止我的程序在开发阶段每次运行调试器时删除数据库。我想在不使用通常的数据库种子设定的情况下执行此操作。由于我将使用导入和导出数据向导,因此我希望使用此方法填充数据库 是否有防止程序删除数据库的方法 以下是我希望能有所帮助的更多信息: 我的初始值设定项 DropCreateDatabaseIfModelChanges<SchoolInDB> { protected override void Seed(SchoolInDB context) {

我希望防止我的程序在开发阶段每次运行调试器时删除数据库。我想在不使用通常的数据库种子设定的情况下执行此操作。由于我将使用导入和导出数据向导,因此我希望使用此方法填充数据库

是否有防止程序删除数据库的方法

以下是我希望能有所帮助的更多信息:

我的初始值设定项

DropCreateDatabaseIfModelChanges<SchoolInDB>
{

    protected override void Seed(SchoolInDB context)
    {

        context.Parents.Add(new Parent { Name = "Mary Lawson", Phone = "949-999-9999", Notes = "Please see IEP " });


        base.Seed(context);


    }

}
DropCreateDatabaseIfModelChanges
{
受保护的覆盖无效种子(SchoolInDB上下文)
{
context.Parents.Add(新父项{Name=“Mary Lawson”,Phone=“949-999-9999”,Notes=“请参阅IEP”});
种子(上下文);
}
}
我的申请开始了

protected void Application_Start()
    {
     System.Data.Entity.Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseAlways<SchoolIn.Models.SchoolInDB>()); 

        AreaRegistration.RegisterAllAreas();
        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }
受保护的无效应用程序\u Start()
{
System.Data.Entity.Database.SetInitializer(新的System.Data.Entity.DropCreateDatabaseAlways());
RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
注册地址(RouteTable.Routes);
}
我的数据库上下文

public class SchoolInDB : DbContext
{
    public DbSet<Course> Courses { get; set; }
    public DbSet<Teacher> Teachers { get; set; }
    public DbSet<Parent> Parents { get; set; }
    public DbSet<PdfReport> PdfReports { get; set; }
    public DbSet<CourseProgress> CourseProgresses { get; set; }
    public DbSet<ParentContact> ParentContacts { get; set; }
    public DbSet<RedAlert> RedAlerts { get; set; }
    public DbSet<Student> Students { get; set; }
    public DbSet<Assignment> Assignments { get; set; }


}
公共类SchoolInDB:DbContext
{
公共数据库集课程{get;set;}
公共数据库集{get;set;}
公共数据库集父项{get;set;}
公共数据库集PdfReports{get;set;}
公共DbSet课程进程{get;set;}
公共DbSet ParentContacts{get;set;}
公共DbSet RedAlerts{get;set;}
公共数据库集学生{get;set;}
公共数据库集分配{get;set;}
}
我的连接字符串

<connectionStrings>
<add name="ApplicationServices"
    connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
    providerName="System.Data.SqlClient" />

我想我应该避免使用SetInitializer来DropCreateDatabaseAlways,而不管模型是否更改,都只加载数据库。我将使用导入和导出向导来填充数据库

谢谢你的帮助

我想我应该避免使用SetInitializer来DropCreateDatabaseAlways,而不管模型是否更改,都只加载数据库。我将使用导入和导出向导来填充数据库

所以不要调用SetInitializer。只需使用连接字符串打开数据库。顺便说一句,DropCreateDatabaseIfModelChanges顾名思义,只有在模式更改时才会删除/创建DB


这就是传统数据库最初的工作原理

详细说明RickAnd的答案,供未来寻找答案的搜索者使用

我假设您的完整初始值设定项类声明是

public class ApplicationDbInitializer : DropCreateDatabaseAlways<SchoolInDB> 
公共类应用程序BinInitializer:DropCreateDatabaseAlways
您只需将其替换为

public class ApplicationDbInitializer : CreateDatabaseIfNotExists<SchoolInDB>
公共类ApplicationBinInitializer:CreateDatabaseIfNotExists

这样,您的数据库仍将使用种子值进行初始化,但不会在每次启动应用程序时删除。

删除数据库的确切原因是什么?是否正在使用实体框架?是的,我正在使用实体框架。CloudyCooper,请尽可能具体地说明是什么原因导致您的数据库被删除。EntityFramework4有一个数据库初始值设定项的概念,它将在创建数据库时为数据库添加一些初始数据。初始值设定项可以在每次生成时删除并重新创建数据库,也可以仅在模型更改时删除并重新创建数据库。您正在使用数据库初始值设定项吗?如果你有一个类继承了一个以
DropCreateDatabase
开头的类,那么你可能是继承了