2016-03-19 12 views
-2

MVCテンプレートを使用して自動的に作成されなかったIdentity 2.0のMVC4プロジェクトがありました。そこには何も変わらなかった。 MVC6 + EF7にプロジェクトを移行することにしました。私は同じソリューションでもう1つのプロジェクトを作成し、すべてのオブジェクトをそこに移動しました。私はそれをGoogleにしようと、実行するための提案を見つけた既存のデータベースでIDを持つEF7

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

私はEFはすでにアプリケーションは、次のメッセージで失敗しそうに存在するオブジェクトを作成しようとするアプリケーションを実行しようとしていた場合

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の移行を無効にするアドオンの移行初期-IgnoreChanges

は、それから私は、次のエラーメッセージを取得していますか?私はデータベースにアクセスするためにOLEDBを使用しており、EFはアイデンティティのためにのみ使用されています。

UPDATE: 示唆した答えによって私は行以下を追加しようとしました下のスタートアップクラスのコンストラクタ

重大度コード説明プロジェクトファイルの行 エラーCS0311タイプに

Database.SetInitializer<ApplicationDbContext>(null); 

'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 \ユーザーユーザー\ソース\レポ\ Proj.Accounting \ Proj.Accounting.Web.Angular \ Startup.cs 50

+0

'ApplicationDbContext'は' DbContext'から継承していますか? – Jcl

+0

はそうではないようです:public class ApplicationDbContext:IdentityDbContext

+0

'IdentityDbContext'(' Microsoft.AspNet.Identity.EntityFramework'の場合)は 'System.Data.Entity.DbContext'から継承する必要があります。もう一度、私はDNXとASP.Net Coreについてはわかりません。多分あなたは別のNuGetパッケージが必要でしょうか?すべての異なるナゲットパッケージとバージョニングは今や深刻な混乱であり、ドキュメントは不足しています: -/ – Jcl

答えて

0

あなたは、コードを使用しています-最初?コードを最初に指定すると、EFはデータベースを作成しようとします。そのデータベースが存在する場合、それらのエラーが発生する可能性があります。コードファーストを無効にするか、初期データベースを設定してください。

set initial database

disable code-firstそれとも、パッケージコンソールを使用して試すことができます:

C:\ PS>アドオンの移行まず

足場

"第一" という名前の新しい移行を

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

C:\ PS>追加マイグレーション先頭-IgnoreChanges

スキャフォールド現在のモデルで検出された保留中の変更は無視され、空の移行は無視されます。 これを使用して、既存の データベースの移行を有効にするための初期の空の移行を作成できます。 N.B.これは、ターゲットデータベーススキーマが現在のモデル と互換性があることを前提としています。

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

+0

質問で私のアップデートを確認してください –

+0

これらのことを試しましたか? http://stackoverflow.com/questions/9703810/how-to-disable-migration-in-entity-framework-4-3-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

希望します。

+0

enable-migrations:「enable-migrations」という用語は、 a cmdlet –

+0

@sidux [[Update-Database]という用語はコマンドレットの名前として認識されません]に関する私の答えを見てください。(http://stackoverflow.com/questions/9674983/the-term-update-database -is-not-a-cmdlet/29031669#29031669として認識されています)。 –

+0

はい、しました。私はさらに最初からプロジェクトを開始しようとしました... –

関連する問題