繁体   English   中英

在现有数据库上具有标识的 EF7

[英]EF7 with identity on existing database

我有一个带有 Identity 2.0 的 MVC4 项目,它不是使用 MVC 模板自动创建的。 那里什么都没有改变。 然后我决定把项目迁移到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);

启动类构造函数

严重性代码描述项目文件行错误 CS0311 类型“Proj.Accounting.Web.Angular.Models.ApplicationDbContext”不能用作泛型类型或方法“Database.SetInitializer(IDatabaseInitializer)”中的类型参数“TContext”。 没有从“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

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

禁用代码优先

设置初始数据库

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

C:\\PS>首先添加迁移

脚手架一个名为“First”的新迁移

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

C:\\PS>首先添加迁移-IgnoreChanges

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

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

尝试通过在 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

希望这可以帮助...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM