###環境
●環境
・統合環境:Visual Studio 2019
・IBM Database Add-ins for Visual Studio 11.1インストール済み
●プロジェクト
・使用言語:C#(.NET Framework 4.6.1)
・種別:ASP.NET MVC 5 Webアプリケーション
・インストール済みパッケージ:EntityFramework.IBM.DB2 6.1.0, IBM.Data.DB2 10.0.5.5
●データベース
・DBMS:DB2 11.1
実現したいこと
ASP.NET Identity認証でデフォルトでSQL Server LocalDBにて作成されたDBを、既存DB(DB2)に移行したい。
(LocalDB内の登録済みデータの移行は不要)
発生している問題・エラーメッセージ
//PMコンソールにてマイグレーション実行時、"update-database"コマンド実行後以下のエラーが発生 System.IndexOutOfRangeException: インデックスが配列の境界外です。 場所 System.Array.InternalGetReference(Void* elemRef, Int32 rank, Int32* pIndices) 場所 System.Array.GetValue(Int32 index) 場所 IBM.Data.DB2.EntityFramework.DB2ProviderServices.DbCreateDatabase(DbConnection connection, Nullable`1 commandTimeout, StoreItemCollection storeItemCollection) 場所 System.Data.Entity.Core.Common.DbProviderServices.CreateDatabase(DbConnection connection, Nullable`1 commandTimeout, StoreItemCollection storeItemCollection) 場所 System.Data.Entity.Core.Objects.ObjectContext.CreateDatabase() 場所 System.Data.Entity.Migrations.Utilities.DatabaseCreator.Create(DbConnection connection) 場所 System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) 場所 System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) 場所 System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration) 場所 System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration) 場所 System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore() 場所 System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
変更したソースコード
Web.config
<!--LocalDBへの接続文字列をコメントアウト--> <!--<add name="DefaultConnection" connectionString="..." providerName="System.Data.SqlClient"/>--> <!--DB2への接続文字列を追加--> <add name="DefaultConnection" connectionString="Database=データベース名;User ID=ユーザID;Persist Security Info=True" providerName="IBM.Data.DB2" /> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> <!--DB2のプロバイダを追加--> <provider invariantName="IBM.Data.DB2" type="IBM.Data.DB2.EntityFramework.DB2ProviderServices, IBM.Data.DB2.EntityFramework, Version=10.5.5.6, Culture=neutral, PublicKeyToken=..." /> </providers>
試したこと
前提として、LocalDB接続状態で、Webページは正常に動作する(Webページより、ユーザ登録・ログインが可能)なことを確認しています。
また、デフォルトの実装状態から、プロファイル情報の追加、ロールの追加を行っています。
以下のページを参考に、"Web.config"ファイル内の接続文字列、プロバイダをLocalDBからDB2のものへ変更し、マイグレーションを実施しました。(上記"変更したコード"記載の通り)
接続文字列は、Visual Studio内"サーバーエクスプローラー"から移行したい先のデータベースを右クリック、"プロパティ"を選択し、"接続文字列"プロパティの値をコピーしました。
プロバイダは、DB2へ接続できている別アプリケーション(但しIdentityは使用していません)の値より、"PublicKeyToken"を含め、コピーしました。
その後、PMコンソールより、
"Enable-Migrations ~.ApplicationDbContext"コマンドを実行、
"Add-Migration connectToDb2"コマンドを実行、
"update-database"コマンド実行時に"発生している問題・エラーメッセージ"のエラーが発生しました。
<参考ページ>
ASP.NET Identity メモ
あなたの回答
tips
プレビュー