如何在没有播种的情况下阻止重新创建数据库?

时间:2012-02-25 20:00:31

标签: asp.net-mvc database

我希望每次在开发阶段运行调试器时都阻止我的程序丢弃数据库。我想在没有通常播种数据库的情况下这样做。由于我将使用“导入和导出数据”向导,因此我想使用这种填充数据库的方法。

有没有一种方法可以防止程序丢弃数据库?

以下是我希望能提供帮助的更多信息:

我的初始化程序

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


    }

}

我的申请开始

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

我的DBContext

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


}

我的连接字符串

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

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

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

  
    

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

  

所以不要调用SetInitializer。只需使用连接字符串打开数据库即可。 BTW,DropCreateDatabaseIfModelChanges顾名思义,只在架构更改时删除/创建数据库。

这就是传统数据库首次运作的方式。

答案 1 :(得分:1)

详细说明RickAnd的答案,为将来的搜索者寻找答案。

我假设您的完整初始化程序类声明是..

public class ApplicationDbInitializer : DropCreateDatabaseAlways<SchoolInDB> 

您只需将其替换为......

public class ApplicationDbInitializer : CreateDatabaseIfNotExists<SchoolInDB>

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