EF7在现有数据库

时间:2016-03-19 07:16:13

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

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

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

我试图谷歌搜索并找到要运行的提案:

Add-Migration Initial -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仅用于Identity。

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

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

2 个答案:

答案 0 :(得分:0)

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

disable code-first

set initial database

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

C:\ PS&gt; Add-Migration First

支持名为“First”的新迁移

--------------------------例2 ------------------- -------

C:\ PS&gt; Add-Migration First -IgnoreChanges

支持空迁移,忽略当前模型中检测到的任何待处理更改。 这可用于创建初始的空迁移,以便为现有迁移启用 数据库。注:这样做假定目标数据库模式与 目前的模式。

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

答案 1 :(得分:0)

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

希望这会有所帮助......