0

私はMVC3を初めて使用し、たくさんのすばらしいチュートリアルを経験しました。デザインパターンを愛し、生産性の向上を楽しんでいます。

私が現在抱えている問題の1つは、ほとんどのチュートリアルで多くの基本的なMVCアプリの背後にあるログインを処理するために組み込みのデータベースを使用していたことです。ライブ本番システムのログイン詳細にアクセスするために変更する必要がありますが、どこでそれを行うかがわかりません。

私が最初に教えたのは、接続文字列を変更するのと同じくらい簡単ですが、本番データベースは、作成された例とはまったく異なります。

モデル/コントローラーがどこからデータを取得しているのかは私にはわかりません。たとえば、モデル/コントローラーはどこでユーザー名を取得したり、パスワードを比較したりしますか。これを知っていれば、正しいデータベース/テーブル/フィールドを指すようにソリューションを変更できます。

また、私の実際のデータベースはEFでモデル化されており、同じソリューション内の別のプロジェクトにあります。つまり、MyProject.DataとMyProject.Webがあり、最終的にはMyProject.Testectがあります。

ここでの助けは大いに感謝されるでしょう。前もって感謝します。

編集1:MVCの単純なログインデータベースと同様に、実際のデータベースにもユーザー名とパスワードのフィールドを持つログインテーブルがあります。ただし、データベースは明らかにサンプルプロジェクトのようにシステムの一部ではありません。代わりに、アクセスされるのを待っているサーバー上にあります。

私の問題は、必要な変更を加えるためにどこに行けばよいかわからないことです。接続文字列だと思っていたのですが、うまくいきません。私が得たエラーでさえ、見つけるためのコード行を私に与えるのではなく、接続文字列に戻るように私を指し示します。

4

1 に答える 1

1

フレームワークは、デフォルトでDbContext派生クラスと同じ名前の接続文字列をプルします。したがって、このクラスと同じ接続文字列を探してください。この接続文字列は、web.configのメンバーシップセクションで識別される接続文字列から取得されるため、デフォルトのフォーム実装とはまったく関係がありません。これは次のようになります。


<membership>
  <providers>
    <clear/>
    <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
         enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
         maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
         applicationName="/" />
  </providers>
</membership>

そこに、connectionStringNameが識別されているのがわかります。もちろん、これを簡単に変更することもできますが、既存のデータベースがある場合は、正しく構造化されていない可能性があります。

Henkによるコメントは、独自のメンバーシッププロバイダーを作成するという点でおそらく正しいでしょう(単にクラスを作成し、MembershipProviderから継承して、CreateUser、GetUser、ValidateUser、およびApplicationNameを実装します(またはそう思います))。AspNetMembershipProviderの代わりにこのプロバイダーを登録する必要があります。これを行うと、プロバイダーでブレークポイントがヒットし、データベース/AD/に必要なときに実装するだけで済みます。

于 2012-05-16T03:22:19.397 に答える