質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.78%

ASP.NET Identity使用DBを既存DB(DB2)へ移行する際のエラー

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 878

score 12

環境

●環境
・統合環境: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 メモ

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • SurferOnWww

    2020/05/06 16:09

    DB2 は全く分かりません(そもそも EF Code First で DB が作れるのかも自分は知りません)ので的外れなコメントかもしれませんが・・・

    > プロバイダをLocalDBからDB2のものへ変更し、

    それはどのようにしたのですか? 例えば、MySQL ですと NuGet で EntityFramework 関係のパッケージをインストールすると、必要な .dll の配置と web.config の設定をしてくれるのですが・・・ DB2 でも最低それと同等の設定をしないとダメかと思いますが。

    キャンセル

  • yukibeatles

    2020/05/06 21:55

    ご回答ありがとうございます。
    正常であれば、プロバイダの変更は、NuGetでのインストールで、自動で各種設定をされる、ということでしょうか。
    私がプロバイダをLocalDBからDB2のものへ変更した方法は、
    ・NuGetで"環境"項に記載のプロジェクトのインストール済みパッケージをインストール
    ・"変更したソースコード"項に記載のDB2のプロバイダを追加しました。

    キャンセル

  • SurferOnWww

    2020/05/06 22:33

    NuGet を使ったというのは分かりましたが、それで上に書いた「必要な .dll の配置と web.config の設定」がされているのかは分かりませんので、何ともコメントしようがないです。お役に立てずすみませんが、他の方の回答をお待ちください。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る