C# EF Code first在IIIS中以Code first的形式不断删除和创建数据库
以下是my DbContext中创建数据和种子数据的部分代码C# EF Code first在IIIS中以Code first的形式不断删除和创建数据库,c#,.net,entity-framework,C#,.net,Entity Framework,以下是my DbContext中创建数据和种子数据的部分代码 public class labSchedulerDbContext :DbContext { static abDbContext() { Database.SetInitializer(new abDatabaseInitializer()); } public abDbContext() :base
public class labSchedulerDbContext :DbContext
{
static abDbContext()
{
Database.SetInitializer(new abDatabaseInitializer());
}
public abDbContext() :base (nameOrConnectionString:"abDbContext")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
公共类labSchedulerDbContext:DbContext
{
静态abDbContext()
{
SetInitializer(新的abDatabaseInitializer());
}
public abDbContext():base(名称或连接字符串:“abDbContext”)
{
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
}
}
代码的其余部分只是声明模型
在我的setinitializer类中使用seed
public class abDatabaseInitializer : DropCreateDatabaseIfModelChanges<abDbContext>
{
.....
}
公共类abDatabaseInitializer:DropCreateDatabaseIfModelChanges
{
.....
}
代码运行良好。我的问题是当我在IIS中创建站点并运行它时。它运行正常,但几小时后它将删除数据库并再次初始化和种子数据。因此,我们丢失了添加的数据。我试图注释掉调用setinitilizer文件的行。还是不行。我刷新了apppool和站点,可能是缓存文件。但还是没有运气。
你能告诉我,一旦创建了一个数据库,我如何禁用整个初始化器文件,这样无论它做什么,都不会删除数据库并创建一个新的数据库。
Cod您可以使用另一个初始值设定项: :这是默认的初始值设定项。顾名思义,如果按照配置不存在数据库,它将创建数据库。但是,如果您更改模型类,然后使用此初始值设定项运行应用程序,那么它将引发异常
在部署具有不同模型的新版本之前,您必须自己删除数据库。(如果这是您想要做的)。IMO,删除创建数据库的想法应该只在开发阶段,而不是在发布网站时,为了避免这种行为,您可以通过#if(DEBUG)database.SetInitializer(…)#endif,您想要的只是摆脱这个问题。您在调试这个应用程序时是否使用相同的连接字符串?只是想知道调试时是否意外使用了错误的连接字符串。