Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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
Asp.net mvc EntityFramework与工具对模型的看法与运行时不同_Asp.net Mvc_Entity Framework_Asp.net Mvc 5.1 - Fatal编程技术网

Asp.net mvc EntityFramework与工具对模型的看法与运行时不同

Asp.net mvc EntityFramework与工具对模型的看法与运行时不同,asp.net-mvc,entity-framework,asp.net-mvc-5.1,Asp.net Mvc,Entity Framework,Asp.net Mvc 5.1,我使用EntityFramework 6.0.2进行显式(非自动)代码优先迁移。我的模型已经建立了很好的基础——我已经使用这个应用程序好几个月了,并且添加了很多迁移。该应用程序使用MVC5 升级到MVC5.1后,我现在的情况是VS中的EF迁移工具对模型的看法与运行时不同。运行Add Migration会创建一个空迁移,Update Migration认为所有未完成的迁移都已应用。但是,当尝试启动站点时,它会失败,出现自动迁移DisabledException: 无法更新数据库以匹配当前模型,因为

我使用EntityFramework 6.0.2进行显式(非自动)代码优先迁移。我的模型已经建立了很好的基础——我已经使用这个应用程序好几个月了,并且添加了很多迁移。该应用程序使用MVC5

升级到MVC5.1后,我现在的情况是VS中的EF迁移工具对模型的看法与运行时不同。运行
Add Migration
会创建一个空迁移,
Update Migration
认为所有未完成的迁移都已应用。但是,当尝试启动站点时,它会失败,出现
自动迁移DisabledException

无法更新数据库以匹配当前模型,因为存在 已禁用挂起的更改和自动迁移。要么写下 对基于代码的迁移的挂起模型更改或启用自动 迁移。将DbMigrationsConfiguration.AutomaticMiggrationsEnabled设置为 true以启用自动迁移

这似乎与我的模型类中的元素有关,这些元素上同时设置了
[Required]
[allowtml]
。这些不是新属性,但我在更新到MVC5.1后创建的第一次显式迁移导致重新创建具有这两个属性的任何属性,而不使用NOTNULL。这是我开始注意到问题的时候,因为这是我无法再运行我的应用程序的时候

我不想删除
[allowtml]
属性。我想找出为什么VisualStudio工具对模型的看法与运行时不同。我已经使用MVC5.0创建了一个简单的测试项目,并将其升级到5.1,但它没有显示相同的行为,因此我正在寻找关于在我的主项目中寻找什么的指针,这可能会影响到这一点

有一个类似的问题,但与MVC5.1无关,这表明这可能与某个地方的版本差异有关。我的应用程序中的所有程序集都引用了所有外部依赖项(如MVC和EF)的同一版本


我已将代码还原为MVC5.0,这使问题暂时消失,但问题仍然无法理解或修复(我仍需要在某个时候更新到5.1!)。

实体框架有一个系统表,用于跟踪已应用的迁移,以及每个迁移的数据库状态的哈希表示。问题是,出于某种原因,这里存在不匹配。这有点麻烦,但最简单的修复方法实际上是继续并应用空迁移。EF将用当前状态更新它使用的系统表,然后它会认为一切都很好


我个人在生产中从未遇到过这个问题,但在开发过程中我也遇到过几次,不幸的是,除了炸掉数据库并让它重新创建之外,我一直无法找到更好的解决方案。对于生产中的某些东西来说,这显然不是一个可接受的解决方案。

事实证明,这个问题是由于我的项目结构造成的。我有多个程序集,但将其简化为:

  • 实体
  • 数据(DbContext和配置)
  • 网络应用

它们不在同一解决方案中,并且从中心生成输出文件夹引用。问题是Entities项目引用了MVC(为了使用
[allowtml]
),但数据项目没有。当VisualStudio工具在数据项目中运行以创建迁移时,它没有看到MVC。但是,由于迁移是从具有MVC的web项目运行的,这导致了不同的行为。

这里没有发生这种情况。EF工具和EF运行时对我的模型的看法不同,因此生成了不同的散列。因此VS工具认为DB与模型同步,但运行时(数据库初始化器)不同意。应用空迁移没有帮助。