我希望每次在开发阶段运行调试器时都阻止我的程序丢弃数据库。我想在没有通常播种数据库的情况下这样做。由于我将使用“导入和导出数据”向导,因此我想使用这种填充数据库的方法。
有没有一种方法可以防止程序丢弃数据库?
以下是我希望能提供帮助的更多信息:
我的初始化程序
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,只是加载数据库是否模型更改。我将使用导入和导出向导来填充数据库。
感谢您的帮助!
答案 0 :(得分:1)
我想我想避免将SetInitializer用于DropCreateDatabaseAlways,只是加载数据库是否模型更改。我将使用导入和导出向导来填充数据库
所以不要调用SetInitializer。只需使用连接字符串打开数据库即可。 BTW,DropCreateDatabaseIfModelChanges顾名思义,只在架构更改时删除/创建数据库。
这就是传统数据库首次运作的方式。
答案 1 :(得分:1)
详细说明RickAnd的答案,为将来的搜索者寻找答案。
我假设您的完整初始化程序类声明是..
public class ApplicationDbInitializer : DropCreateDatabaseAlways<SchoolInDB>
您只需将其替换为......
public class ApplicationDbInitializer : CreateDatabaseIfNotExists<SchoolInDB>
这样,您的数据库仍将使用种子值进行初始化,但每次启动应用程序时都不会删除。