【问题标题】:Entity Framework Code First not is not reading model and creating table in databaseEntity Framework Code First 不是读取模型并在数据库中创建表
【发布时间】:2026-01-29 00:35:02
【问题描述】:

以前我很擅长更新数据库,每当我想在数据库中创建一个表时,我只是用创建一个模型然后命令

更新数据库-详细

而实体框架代码首先处理其余的,现在,我一直在努力寻找更新数据库,因为每当我创建模型时它都不会更新,所以,我想从头开始启动数据库可能工作,所以,我从数据库中删除了我的 __MigrationHistory 表,删除了 Migrations 文件夹,再次启用它,添加了初始迁移,注释掉了 up() 方法中的内容,现在再次使用相同的命令更新数据库(Update-database -详细)但没有收获。

我的问题是它为什么不读取模型并在数据库中创建新表?我如何使命令 update-database 再次工作,因为以前它确实如此?

【问题讨论】:

  • 您是否有机会使用 DatabaseInitializers?
  • 是的,我正在使用此代码:static HrAndPayroll() { Database.SetInitializer<HrAndPayroll>(null); }
  • 这是正确的!你能分享-VerboseUpdate-Database 命令的输出吗?
  • 先生,-Verbose 没有显示创建表查询,但我已经为此创建了一个模型,我不知道它为什么要读取模型,-Verbose 表示没有待定的显式迁移.
  • 更新模型后是否执行了添加迁移?这将创建一个新的迁移文件,其中包含您的 sql 更新。然后该文件将由 update-database 脚本执行。

标签: asp.net-mvc entity-framework code-first


【解决方案1】:

创建新模型后,您要么必须在运行 Update-Database 之前手动添加迁移,以正确提醒数据库发生更改,要么启用自动迁移。您可以通过在包管理器中运行以下命令来进行手动迁移:

Add-Migration NameOfMigration

您可以通过在包管理器中运行以下命令来启用自动迁移:

Enable-Migrations –EnableAutomaticMigrations

如果您使用自动迁移,您只需运行Update-Database,对模型的任何更改(包括添加新模型)都将被自动检测并添加到您的数据库中。

【讨论】:

  • 先生,这个我已经试过了,但没有收获,为了论证,我再次创建了新模型check,添加了一些属性,然后简单地运行了上面的命令,但没有收获 :( update-database -Verbose 仍然在说 no explicit migrations 并且当我 add-migration initial 时,它在 Up() 方法中创建了带有 nothing 的初始迁移文件,而它应该有 @987654330 @sql 在里面更新..
  • 您是在多项目环境中工作,还是在单个项目中工作?
  • 基本上是一个项目但是在连接字符串中访问两个数据库,一个是默认的,另一个是我自己为实体框架代码首先创建的,即HrAndPayroll,但我也是在启用迁移时将“-contexttypename”指定为 HrAndPayroll,但仍然没有更改..
  • 使用-ContextTypeName 时,您需要指定上下文的完全限定名称,包括命名空间。你应该这样做:-ContextTypeName MyNameSpace.MyNestedNameSpace.HrAndPayroll.
最近更新 更多