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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Entity Framework

Entity Frameworkは、.NET Framework 3.5より追加されたデータアクセス技術。正式名称は「ADO.NET Entity Framework」です。データベースエンジンに依存しておらず、データプロバイダの変更のみで様々なデータベースに対応できます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

Q&A

0回答

2561閲覧

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

yukibeatles

総合スコア12

Entity Framework

Entity Frameworkは、.NET Framework 3.5より追加されたデータアクセス技術。正式名称は「ADO.NET Entity Framework」です。データベースエンジンに依存しておらず、データプロバイダの変更のみで様々なデータベースに対応できます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

0グッド

0クリップ

投稿2020/05/04 05:27

###環境

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukibeatles

2020/05/05 16:45

ご回答ありがとうございます。 コミュニティのメンバーになり、リンク先を確認してみましたが、 残念ながらリンクが切れているようでした。
退会済みユーザー

退会済みユーザー

2020/05/06 07:09

DB2 は全く分かりません(そもそも EF Code First で DB が作れるのかも自分は知りません)ので的外れなコメントかもしれませんが・・・ > プロバイダをLocalDBからDB2のものへ変更し、 それはどのようにしたのですか? 例えば、MySQL ですと NuGet で EntityFramework 関係のパッケージをインストールすると、必要な .dll の配置と web.config の設定をしてくれるのですが・・・ DB2 でも最低それと同等の設定をしないとダメかと思いますが。
yukibeatles

2020/05/06 12:55

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

退会済みユーザー

2020/05/06 13:33

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問