8

EntityFramework / MVC4/DatabaseFirstプロジェクトでsimplemembershipシナリオを機能させるのに苦労しています。最初にコードを操作するための例をたくさん見つけましたが、DBを最初に使用する例はありません。

私が遭遇している問題は、InitializeDatabaseConnectionがエラーをスローしていることです(「要求された.Net Frameworkデータプロバイダーが見つかりません。インストールされていない可能性があります。」)コードは次のようになります。

WebSecurity.InitializeDatabaseConnection("DALEntities", "tblContacts1", "ContactID", "EMail", autoCreateTables: true);

どのDataProviderが失敗しているかわかりません。InitializeDatabaseConnection呼び出しをトレースしようとすると、すぐにエラーがスローされます。

私は何が欠けていますか?

情報:
DALEntitiesは、残りのEFが使用するconnectionStringの名前です。次のコードは問題なく動作します。

    public ActionResult Test() {
        using (var db = new DALEntities()) {
            var query = from i in db.TBLINVENTORies
                            orderby i.ITEMNAME
                            select i;
            var cnt = query.Count();
            string str = "Total Inventory: " + cnt;
            return Content(str);
        }
    }

web.configの接続文字列セクション:

  <connectionStrings>
    <add name="DALEntities" connectionString="metadata=res://*/DAL.DAL.csdl|res://*/DAL.DAL.ssdl|res://*/DAL.DAL.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SOMECOMPUTER;initial catalog=SOMEDB;persist security info=True;user id=SOMEID;password=SOMEPASS;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>

この投稿は同じ質問をしているようです(ただし、モデルファーストのコンテキストで)が、まだ解決策はありません:EFモデルファーストでSimpleMembershipを使用する

WebSecurity.InitializeDatabaseConnection()また、ヘルプテキストで過負荷が発生していることがわかりますInitializes the membership system ((blah blah <snip> ProviderName: the name of the ADO.NET data provider. If you want to use Microsoft SQL Server, the WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection(String, String, String, String, Boolean) overload is recommendedMSSQLサーバーに接続したいのですが...これは必要ですか?

4

2 に答える 2

7

問題を引き起こしているプロバイダは、接続文字列で指定されている System.Data.EntityClient です。問題は、単純なメンバーシップがコードファーストを使用しているのに対し、プロジェクトがデータベースファーストであるためだと思われます。これらのアプローチを 1 つのデータベースに混在させることはできないと思います。DefaultConnection が IntializeDatabaseConnection に使用されている場所に戻してみてください。MVC4 スキャフォールディングによって生成された web.config に DefaultConnection があるはずです。この接続文字列は通常、System.Data.SqlClient をプロバイダーとして使用します。

ドメイン情報 (つまり、DALEntities) を格納するために使用されるデータベースで単純なメンバーシップを維持したい場合は、ドメインで EF を使用する方法をコード ファーストに変更する必要があります。プロジェクト データベース ファーストを保持する場合は、データベース内に独自のメンバーシップ スキーマを設計し、カスタム メンバーおよびロール プロバイダーを開発する必要があります。ユーザー情報をドメイン モデルに統合しようとしている場合は、おそらくこれが最善の方法です。

于 2012-10-15T20:15:35.273 に答える
1

わかりやすくするために、2 つの接続文字列が同じデータベースを指すようにします。1 つは EF 用 (コードが最初かデータが最初かは関係ありません) で、もう 1 つは WebSecurity のものです。(チャドとエリックが言ったように)

<add name="DataEntities" connectionString="metadata=res://*/Models.DataEntities.csdl|res://*/Models.DataEntities.ssdl|res://*/Models.DataEntities.msl;provider=System.Data.SqlClient;provider connection string='data source=[YOUR_SERVER];initial catalog=[YOUR_DATABASE];integrated security=True;MultipleActiveResultSets=True;App=[YOUR_APP_NAME]'" providerName="System.Data.EntityClient" />
<add name="DataDB" connectionString="data source=[YOUR_SERVER];initial catalog=[YOUR_DATABASE];integrated security=True;MultipleActiveResultSets=True;App=[YOUR_APP_NAME]" providerName="System.Data.SqlClient" />

プロバイダーが異なることに注意してください。EF は System.data.EntityClient を使用し、非 EF は System.Data.SqlClient を使用します。

于 2014-08-03T20:08:23.973 に答える