【问题标题】:EF7 with identity on existing databaseEF7 与现有数据库上的身份
【发布时间】:2016-03-19 07:16:12
【问题描述】:

我有一个没有使用 MVC 模板自动创建的带有 Identity 2.0 的 MVC4 项目。那里什么都没有改变。然后我决定将项目迁移到MVC6 + EF7。我在同一个解决方案中创建了另外 1 个项目并将所有对象移到那里。当我尝试运行应用程序时,EF 尝试创建已存在的对象,因此应用程序失败并显示以下消息:

SqlException: There is already an object named 'AspNetRoles' in the database.

我已经尝试用谷歌搜索它并找到要运行的提案:

添加-迁移初始-IgnoreChanges

然后我收到以下错误消息:

Exception calling "SetData" with "2" argument(s): "Type 'Microsoft.VisualStudio.ProjectSystem.VS.Implementation.Package.Automation.OAProject' in 
assembly 'Microsoft.VisualStudio.ProjectSystem.VS.Implementation, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is not 
marked as serializable."
At C:\Users\user\Source\Repos\Proj.Accounting\packages\EntityFramework.6.1.3\tools\EntityFramework.psm1:720 char:5
+     $domain.SetData('startUpProject', $startUpProject)
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SerializationException

System.NullReferenceException: Object reference not set to an instance of an object.
   at System.Data.Entity.Migrations.Extensions.ProjectExtensions.GetProjectTypes(Project project, Int32 shellVersion)
   at System.Data.Entity.Migrations.Extensions.ProjectExtensions.IsWebProject(Project project)
   at System.Data.Entity.Migrations.MigrationsDomainCommand.GetFacade(String configurationTypeName, Boolean useContextWorkingDirectory)
   at System.Data.Entity.Migrations.AddMigrationCommand.Execute(String name, Boolean force, Boolean ignoreChanges)
   at System.Data.Entity.Migrations.AddMigrationCommand.<>c__DisplayClass2.<.ctor>b__0()
   at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
Object reference not set to an instance of an object.

所以我的问题是:如何禁用 EF 迁移?我正在使用 OLEDB 访问数据库,而 EF 仅用于身份。

更新: 通过下面的建议答案,我尝试添加以下行

Database.SetInitializer<ApplicationDbContext>(null);

Startup类构造函数

严重性代码描述项目文件行 错误 CS0311 类型“Proj.Accounting.Web.Angular.Models.ApplicationDbContext”不能是 在泛型类型或方法中用作类型参数“TContext” 'Database.SetInitializer(IDatabaseInitializer)'。 没有隐式引用转换 'Proj.Accounting.Web.Angular.Models.ApplicationDbContext' 到 'System.Data.Entity.DbContext'。 Proj.Accounting.Web.Angular.DNX 4.5.1 C:\Users\User\Source\Repos\Proj.Accounting\Proj.Accounting.Web.Angular\Startup.cs 50

【问题讨论】:

  • 您的ApplicationDbContext 是否继承自DbContext
  • 似乎没有:公共类 ApplicationDbContext : IdentityDbContext
  • IdentityDbContext(如果在Microsoft.AspNet.Identity.EntityFramework)应该继承自System.Data.Entity.DbContext,所以应该没问题......再说一次,我不确定DNX和ASP.Net Core,也许您需要不同的 NuGet 包吗?所有不同的 nuget 包和版本控制现在都是一团糟,文档稀缺:-/

标签: c# asp.net-mvc entity-framework asp.net-core-mvc


【解决方案1】:

您是否使用代码优先?使用代码优先 EF 尝试创建数据库。如果该数据库存在,您可能会收到这些错误。尝试禁用代码优先或设置初始数据库。

disable code-first

set initial database

或者你可以尝试使用包控制台:

C:\PS>先添加迁移

构建一个名为“First”的新迁移

-------------- 示例 2 ------------------- -------

C:\PS>Add-Migration First -IgnoreChanges

构建一个空迁移,忽略在当前模型中检测到的任何未决更改。 这可用于创建初始的空迁移,以启用现有迁移 数据库。注:这样做假定目标数据库模式与 当前型号。

https://coding.abel.nu/2012/03/ef-migrations-command-reference/

【讨论】:

【解决方案2】:

通过在 PM 控制台上运行脚本尝试使用以下方法:

1) 启用迁移:

enable-migrations -ContextTypeName ProjectName.DbContext -MigrationsDirectory:Migrations -EnableAutomaticMigrations –Force

2) 使用“IgnoreChanges”创建一个空迁移:

Add-Migration –configuration ProjectName.Migrations.Configuration migration_01 –IgnoreChanges

3) 更新数据库:

Update-Database -configuration ProjectName.Migrations.Configuration -Verbose

欲了解更多信息:https://msdn.microsoft.com/en-us/data/dn579398.aspx

希望这会有所帮助...

【讨论】:

  • enable-migrations : 术语“enable-migrations”未被识别为 cmdlet 的名称
  • @sidux 你解决了“'Update-Database'这个词没有被识别为一个cmdlet的名字。”的问题了吗?如果是,那么现在的问题是什么?
  • 不,我没有。我仍然有同样的问题。
  • 退出 Visual Studio 并尝试清理 WebSiteCache 文件夹(您可以在 C:\Users\%USERNAME%\AppData\Local\Microsoft\WebSiteCache 找到它) 和“Temporary ASP.NET Files”文件夹(位于 C:\Users\%USERNAME%\AppData\Local\Temp\Temporary ASP.NET Files)。然后重新启动计算机并继续应用遇到错误的步骤。
猜你喜欢
  • 2021-06-02
  • 2015-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
相关资源
最近更新 更多