Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Entity framework EntityFramework 6.0 CreateDatabaseIfNoteExists代码在创建初始结构之前首先尝试迁移_Entity Framework - Fatal编程技术网

Entity framework EntityFramework 6.0 CreateDatabaseIfNoteExists代码在创建初始结构之前首先尝试迁移

Entity framework EntityFramework 6.0 CreateDatabaseIfNoteExists代码在创建初始结构之前首先尝试迁移,entity-framework,Entity Framework,我有一个完美工作的EF6.0 DbContext,我使用以下代码初始化它: using (var db = new MyDbContext()) { db.Database.CreateIfNotExists(); } 我今天就开始在上面测试迁移。我所做的是:在包管理器窗口中运行以下命令: Enable-Migrations –EnableAutomaticMigrations 然后我修改了其中一个类,添加了一个publ

我有一个完美工作的EF6.0 DbContext,我使用以下代码初始化它:

        using (var db = new MyDbContext())
        {
            db.Database.CreateIfNotExists();
        }
我今天就开始在上面测试迁移。我所做的是:在包管理器窗口中运行以下命令:

Enable-Migrations –EnableAutomaticMigrations
然后我修改了其中一个类,添加了一个
public int TestField{get;set;}
属性并运行:

Add-Migration AddTestId
添加:另外,我创建了一个静态初始值设定项:

    static MyDbContext()
    {
        Database.SetInitializer(
            new MigrateDatabaseToLatestVersion<MyDbContext, Configuration>()); 
    }
基本上发生的情况是:在
创建数据库之后,
是:EF直接进行迁移,即使初始结构从未创建过,所以ALTER TABLE失败,因为还没有创建一个表来进行修改


我觉得我错过了一步。我做错了什么?

我做了一些挖掘并想出了最终对我有用的程序。这必须在clean项目上完成,例如:文件夹
迁移
不应该已经存在。如果是-在源代码管理中执行回滚,并确保它不在磁盘上

另外,EF似乎正在使用服务器(或localdb)上的数据库,所以如果您使用它,从头开始重建模式可能是一个好主意。在我的例子中,删除它是有效的,因为我从零开始

首先要做的事情:

  • 将我的db项目设置为启动项目(很重要,因为它从这里获取app.config)
  • 在“包管理器”窗口中将我的db项目设置为默认值
删除默认数据库

  • 检查MyDB项目中的app.config,确保存在有效的连接字符串,并且MyDbContext的默认构造函数正在使用它
  • 删除该数据库
让package manager发挥其神奇作用,运行以下命令:

Enable-Migrations –EnableAutomaticMigrations
Add-Migration "Initial"
Update-Database

添加迁移“Initial”
之后,必须在Migrations文件夹中显示一个文件,其中包含
public override void Up()
方法,该方法应创建完整的架构。如果不这样做,则会出现问题。

使用CreateFile、ReadFile、WriteFile来存储数据库中的数据,而不是unsign函数SQL(这很复杂,也很难)。 对于c#使用StreamWriter、BinaryWriter、StreamReader、BinaryReader代替EntityFrameWork(这非常复杂和困难!)。
Perso I使用文件函数API存储数据。

是否更新数据库?不确定,只是猜测一下也可以看到:@两次我没有提到我确实运行了更新数据库,但是由于单元测试中的数据库是从头创建的,所以我看不出有任何可能产生任何影响的原因
Enable-Migrations –EnableAutomaticMigrations
Add-Migration "Initial"
Update-Database