Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 禁用迁移_C#_Entity Framework_Entity Framework Migrations_Ef Model First - Fatal编程技术网

C# 禁用迁移

C# 禁用迁移,c#,entity-framework,entity-framework-migrations,ef-model-first,C#,Entity Framework,Entity Framework Migrations,Ef Model First,我正在编写一个附加到数据库的web api,该数据库是我首先使用Model创建的 作为新手,我首先混淆了模型和代码 由于这是我的第一个EF/Web应用程序,我没有意识到迁移还没有首先由模型实现,我按照过程来实现它。当它运行时,我收到一些错误,查找它们,然后才意识到我需要再次删除它 按照某人的指示,我从数据库中删除了migrations文件夹和_migrationHistory表 protected void Application_Start() { // Call initializer

我正在编写一个附加到数据库的web api,该数据库是我首先使用Model创建的

作为新手,我首先混淆了模型和代码

由于这是我的第一个EF/Web应用程序,我没有意识到迁移还没有首先由模型实现,我按照过程来实现它。当它运行时,我收到一些错误,查找它们,然后才意识到我需要再次删除它

按照某人的指示,我从数据库中删除了migrations文件夹和_migrationHistory表

protected void Application_Start()
{
  // Call initializer
  Database.SetInitializer(new PulseDbInitializer());
  new ApplicationDbContext().Database.Initialize(true); <- error here

  AreaRegistration.RegisterAllAreas();
  GlobalConfiguration.Configure(WebApiConfig.Register);
  FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
  RouteConfig.RegisterRoutes(RouteTable.Routes);
  BundleConfig.RegisterBundles(BundleTable.Bundles);
}
但是现在每当数据库中缺少_migrationhistory表时,我就会收到以下异常

protected void Application_Start()
{
  // Call initializer
  Database.SetInitializer(new PulseDbInitializer());
  new ApplicationDbContext().Database.Initialize(true); <- error here

  AreaRegistration.RegisterAllAreas();
  GlobalConfiguration.Configure(WebApiConfig.Register);
  FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
  RouteConfig.RegisterRoutes(RouteTable.Routes);
  BundleConfig.RegisterBundles(BundleTable.Bundles);
}
受保护的无效应用程序\u Start()
{
//呼叫初始值设定项
SetInitializer(新的pulsedBinInitializer());

新建ApplicationDbContext().Database.Initialize(true);您的初始值设定项继承自检查模型更改的DropCreateDatabaseIfModelChanges
。由于您不首先使用代码,因此无法检查代码中的模型更改(由于您的代码不定义模型-即代码优先-…模型定义代码-即模型优先-…因此您需要实现自己的
IDatabaseInitializer
,它只检查(例如)数据库是否存在:

public partial class PulseDbInitializer : IDatabaseInitializer<ApplicationDbContext>, IPulseDbInit
{
  public void InitializeDatabase(ApplicationDbContext context)
  {
    var exists = new DatabaseTableChecker().AnyModelTableExists(context.InternalContext);
    if (exists == DatabaseExistenceState.Exists)
    {
       // maybe check if certain data exists and call the `Seed` method if
       // it doesn't
       return;
    }

    // Throw some error if it doesn't exist
  }

  protected override void Seed(ApplicationDbContext context)
  {
    _context = context;
    var pid = new PulseDbInitializionData(context);
    pid.Init(this);
  }
}
公共部分类pulsedBinInitializer:IDatabaseInitializer,IPulseDbInit
{
public void InitializeDatabase(ApplicationDbContext上下文)
{
var exists=新建DatabaseTableChecker().AnyModelTableExists(context.InternalContext);
if(exists==DatabaseExistenceState.exists)
{
//可能会检查某些数据是否存在,如果存在,则调用'Seed'方法
//没有
返回;
}
//如果不存在,则抛出一些错误
}
受保护的重写无效种子(ApplicationDbContext上下文)
{
_上下文=上下文;
var pid=新的PulseDbInitializionData(上下文);
pid.Init(this);
}
}

您注释掉的DropCreateDatabaseAlways应该可以工作。@SteveGreene是的,但这会在每次初始化时删除并重新创建数据库,不是吗?是的,运行一次,然后切换回DropCreateDatabaseIfModelChanges