0

新しいプロジェクトC#を開始し、パッケージコンソールウィンドウで「enable-migrations」コマンドを使用しました。これにより、プロジェクトに移行が自然に追加されました。次に、自動移行をtrueに設定します。これにより、「update-database」を呼び出すと、すべてのキーとそれを使用してテーブルが作成されます。

唯一の問題は、これを実行したい複数のWebサイトがあり、それらすべてがASP.NETメンバーシッププロバイダーを使用してログインすることです。自動コード移行により、使用するアカウントテーブルの束が作成されます。ただし、テーブルはすべて同じと呼ばれるため、異なるサイトの同じデータベースを対象としてこれを行うと、テーブルは互いに上書きされます。だから私が得た質問はこれです:エンティティフレームワークによって作成されたテーブルのプレフィックスをどのように指定できますか?

検索中にこれを行う方法についていくつかのアイデアを見てきましたが、それらは私にはうまくいきませんでした(必要なプロパティが何らかの理由でそこになかったなど)。

ありがとうございました

Xenoxsis

4

2 に答える 2

1

それをどのように計画しているのかわかりませんが、正しく理解できれば、維持したいと思いますがone database (shared) in between number of web sites、各サイトには、異なる名前の異なるプレフィックスを持つ独自のメンバーシップテーブルがありますか?

最初の問題は、for each Db/table name change - you need a 'code to match'つまり、コードファーストエンティティとコード、Dbの「移行テーブル」とテーブルがすべて同期しているため、すべてが正常に連携できることです。その意味で、Dbでスクリプト名またはテーブル名を変更するだけでは機能しませんIt has to be done at the level of attributes (as @Steven suggested) or fluent configuration.

これは、どういうわけか、サイトごとに個別の構成を「構築」し、それらを個別に(コード)各サイトにデプロイする必要があることを意味します-そして、それぞれmega Dbの小さなものをすべてvariants一緒にマージしたものを構築します。

それを管理するのは難しいでしょう-しかし、あなたは試すことができます(私が上で説明したこと)-それがうまくいくかどうかはわかりません(これを試すには多くの「インフラストラクチャ」が必要なので)-しかしおそらくこれらの線に沿っています。 。

  • Table属性 を置く(または流暢な設定を介して)
  • コードをビルドします-それぞれのテーブル名を「変更」します-そして再構築します(理想的には、これをバッチで自動的に行うために、ツール、コードジェネレーターを使用する必要があるかもしれません-つまり、ビルド、ファイルを外部にコピーし、名前を変更して繰り返す)
  • ケースごとに「移行」を作成し(テーブル名)、移行をファイルとしてUpdate-Database -Script保存し、ケースごとに実際のスクリプトを保存します(重要)。
  • 各移行を保存します。または、「スクリプト」と言って表すことができます。
  • 完了したらmerge、スクリプトを移行する必要があります。one big master scriptつまり、同じテーブルのセットを削除し(もちろん、1つだけ残します)、メンバーシップテーブルのすべての異なるセットをコピーします。
  • データベースからを削除しmigration table ます-それは確かに同期しておらず、何もできません(または、コードにフラグがありますが、それを無視すると思いますが、今は持っていません)。詳細については、以下の他の投稿を参照してください。
  • 作成したスクリプトを使用して、1つのマスターDbをデプロイします
  • 特定のコードを各サイトにデプロイします。
  • それがすべてうまくいくことを祈ってください:)

よりスマートなものがあるはずですが、その一方で、移行はそのようなシナリオでは機能しないため、これを実現することは不可能ではないにしても難しいでしょう。

役立つかもしれないいくつかの一般的な情報...

移行を既存のデータベースと同期する方法-本番シナリオを対象とし、Db-sとCFを一致させるように維持します。それはあなたが必要としているものではありませんが、詳細な説明、私が少し前に書いたこれを解決するための可能な方法があります...

MVC3とコードファーストの移行-「データベースが作成されてから、「blah」コンテキストをサポートするモデルが変更されました」

要約する...

私にとってうまくいくのは、Update-Database-Scriptを使用することです

これにより、「移行の違い」を持つスクリプトが作成されます。これは、ターゲットサーバーデータベースにSQLスクリプトとして手動で適用できます(適切な移行テーブルの行を挿入する必要があります)。

それでもうまくいかない場合は、2つのことを行うことができます...(もっと内側に)...

于 2013-03-25T16:38:39.260 に答える
0

とにかく、EntityFrameworkにすべてのエンティティでこれを自動的に実行させる方法はわかりません。ただし、属性または流暢なAPIを使用してテーブル名またはスキーマを強制し、目的の効果を得ることができます。例えば:

[Table("[put prefix here]_Users", Schema = "[put schema here]")]
public class User { 
    // ... 
}
于 2013-03-25T13:35:38.547 に答える