efコア:すでにデータベースに名前が付けられているオブジェクトがあります

asp.net-core database entity-framework entity-framework-core

質問

こんにちは私は、ASFのコアアプリケーションを使用しています。これはefコアバージョンを使用しています:

"Microsoft.EntityFrameworkCore.Design": "1.1.0"、 "Microsoft.EntityFrameworkCore.SqlServer": "1.1.0"

およびドットネット標準1.6.1。

ここに私のscenaroです:

  1. 4データベースのみのdbcontext
  2. DBSetまたはanyotherは、2つまたは3つのコンテキストで表示されます。たとえば、AContextにはtableAが含まれ、BContextにはtableAも含まれます。特定の文脈にその目的に焦点を当てたいので、それらのどれもがすべてのテーブルを含むことはありません。
  3. テーブル間の多くのforeigneキー

これはデータベースのdupテーブルを引き起こしますが、これを解決するために、私は以下を行っています

  1. すべてのDBSetを含めるためにMigrationDBContextを作成する
  2. このMigrationDBContextに移行を追加する

ここに私が得るものがある

  1. 正しいスキーマと名前を持つデータベースとテーブルを正常に作成する
  2. 呼び出し時のエラー:serviceScope.ServiceProvider.GetService()。Database.Migrate();エラーメッセージ:既にデータベースに名前が付けられたオブジェクト 'A'があります。

残念ながら、-vのef coreのupdate-databaseコマンドはsqlスクリプトを表示せず、Script-Migrationは単純なcreate SQL文だけを表示します。

私の質問は

  1. このような状況をどのようにデバッグするのですか?
  2. マイグレーションファイルをチェックして、ダウンしてメソッドがありますが、このエラーはefコアのように、マイグレーションファイルのupメソッドを呼び出すことなく、ダウンを最初に呼び出すことなく、テーブルがまだそこにあるのでいくつかのdupを結果として出ます。では、移行動作を制御するスイッチはありますか?

受け入れられた回答

最も簡単な方法は、エンティティとエンティティ間のすべてのセットを含む1つのDbContextを作成することです。その後、リポジトリでストレージロジックを分離できます。難しい方法は、コンテキストごとにコンテキスト固有の移行を作成することです。また、別のコンテキストに存在するエンティティのセットを追加する必要がある場合は、そのコンテキストに対して空の移行を作成する必要があります。これは少し汚い方法です。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ