gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:24:47 25 4
gpt4 key购买 nike

我有一个完美运行的 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>());
}

我尝试运行单元测试。它过去所做的是从头开始创建一个数据库(例如:数据库在单元测试之前不存在)。它使用的是我最初发布的代码,例如:CreateIfNotExists()

我注意到单元测试现在因 SQL 异常而失败 找不到对象“dbo.RecordExpirations”,因为它不存在或您没有权限

我在数据库上运行 SQL 探查器以查看正在运行的内容,我看到以下内容(为简单起见清理了代码,删除了“go”和“sp_resetconnection”行):

select serverproperty('EngineEdition')
SELECT Count(*) FROM sys.databases WHERE [name]=N'MYDBNAME'
create database [MYDBNAME]
if serverproperty('EngineEdition') <> 5 execute
sp_executesql N'alter database [MYDBNAME] set read_committed_snapshot on'
ALTER TABLE [dbo].[RecordExpirations] ADD [TestField] [int] NOT NULL DEFAULT 0
drop database [MYDBNAME]

基本上发生的事情是:在 create database 之后:EF 直接继续运行迁移,即使从未创建初始结构,所以 ALTER TABLE 失败,因为还没有创建表改变。

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

最佳答案

我做了一些挖掘并找出了最终适合我的程序。这必须在干净的项目上完成,例如:文件夹 Migrations 不应该已经存在。如果是 - 在源代码控制中执行回滚,并确保它不在物理磁盘上。

此外,似乎 EF 正在使用服务器上的数据库(或 localdb),因此如果您尝试过它,从头开始重建架构可能是个好主意。就我而言,删除它是有效的,因为我从零开始。

首先要做的事情:

  • 将我的数据库项目设置为启动项目(重要因为这是从中获取 app.config 的地方)
  • 在包管理器窗口中将我的数据库项目设置为默认项目

删除默认数据库

  • 检查我的数据库项目中的 app.config,确保存在有效的连接字符串,并且 MyDbContext 的默认构造函数正在使用它。
  • 删除那个数据库

让包管理器发挥它的魔力,运行以下命令:

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

Add-Migration "Initial" 之后,一个文件必须出现在 Migrations 文件夹中,并带有 public override void Up() 方法,它应该创建完整的模式。如果它不这样做,那就是出了问题。

关于entity-framework - EntityFramework 6.0 CreateDatabaseIfNotExists 代码在创建初始结构之前首先尝试迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24664146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com