3

Web.config に次の接続文字列を設定して、エンティティ フレームワークを使用して C# MVC4.5 プロジェクトを作成しています。

<connectionStrings>
    <add name="Entities" 
         connectionString="metadata=res://*/PersistenceModel.csdl|res://*/PersistenceModel.ssdl|res://*/PersistenceModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\sqlexpress;initial catalog=TravPro;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" 
         providerName="System.Data.EntityClient" /> 
</connectionStrings>

次に、この文字列に次のようにアクセスします。

string con = ConfigurationManager.ConnectionStrings["Entities"].ConnectionString;
WebSecurity.InitializeDatabaseConnection(con,
                                         "UserProfile", 
                                         "UserId", 
                                         "UserName", 
                                         true);

これにより、「パスに不正な文字が含まれています」という例外がスローされます。

[ArgumentException: Illegal characters in path.]
   System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional) +10631190
   System.IO.Path.Combine(String path1, String path2) +42
   WebMatrix.Data.ConfigurationManagerWrapper.GetConnection(String name, Func`2 getConfigConnection, Func`2 fileExists) +208
   WebMatrix.Data.ConfigurationManagerWrapper.GetConnection(String name) +91
   WebMatrix.Data.Database.OpenNamedConnection(String name, IConfigurationManager configurationManager) +18
   WebMatrix.Data.Database.Open(String name) +61
   WebMatrix.WebData.DatabaseConnectionInfo.Connect() +42
   WebMatrix.WebData.SimpleMembershipProvider.ConnectToDatabase() +25
   WebMatrix.WebData.SimpleMembershipProvider.CreateTablesIfNeeded() +35
   WebMatrix.WebData.WebSecurity.InitializeMembershipProvider(SimpleMembershipProvider simpleMembership, DatabaseConnectionInfo connect, String userTableName, String userIdColumn, String userNameColumn, Boolean createTables) +73
   WebMatrix.WebData.WebSecurity.InitializeProviders(DatabaseConnectionInfo connect, String userTableName, String userIdColumn, String userNameColumn, Boolean autoCreateTables) +51
   WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection(String connectionStringName, String userTableName, String userIdColumn, String userNameColumn, Boolean autoCreateTables) +51
   TravPro.Web.Filters.SimpleMembershipInitializer..ctor() in c:\Work\trunk\TravPro\TravPro.Web\Filters\InitializeSimpleMembershipAttribute.cs:43

誰かが助けて、どの文字をエスケープする必要があるか、またはこの例外を修正する方法を教えてもらえますか?

4

3 に答える 3

3

保存した接続文字列はEntity Framework用です。「通常の」ADO.NET 接続文字列ではありません。Entity Framework 接続文字列には、通常の ADO.NET 接続文字列 ( 内のビット) が含まれprovider connection string=.....ていますが、これに加えてさらに多くのものがあります。

WebSecurity一方、Entity Framework 接続文字列ではなく、通常の ADO.NET 接続文字列が入力として想定ます

したがって、これを解決するには、構成ファイルのセクションにの 2 つ目の接続文字列WebSecurityを追加する必要があります。<connectionStrings>

<connectionStrings>
    <add name="Entities" 
         connectionString="metadata=res://*/PersistenceModel.csdl|res://*/PersistenceModel.ssdl|res://*/PersistenceModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\sqlexpress;initial catalog=TravPro;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" 
         providerName="System.Data.EntityClient" />
    <add name="RegularADONET" 
         connectionString="data source=.\sqlexpress;initial catalog=TravPro;integrated security=True;MultipleActiveResultSets=True;" 
</connectionStrings>

次に、その 2 番目の「通常の」ADO.NET 接続文字列を次のように使用しますWebSecurity

string con = ConfigurationManager.ConnectionStrings["RegularADONET"].ConnectionString;
WebSecurity.InitializeDatabaseConnection(con, "UserProfile", "UserId", "UserName", true);
于 2013-01-02T08:46:23.920 に答える
1

私はあなたの方法で試しました(@marc_s)が、解決策の方向に私を導きましたが、まだ問題がありました. connectionStrings を次のように変更します。

<connectionStrings>
    <add name="DefaultConnection"
         connectionString="data source=.\sqlexpress;initial catalog=TravPro;integrated security=True;MultipleActiveResultSets=True;"
         providerName="System.Data.SqlClient" />
    <add name="Entities"
         connectionString="metadata=res://*/PersistenceModel.csdl|res://*/PersistenceModel.ssdl|res://*/PersistenceModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\sqlexpress;initial catalog=TravPro;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;"
         providerName="System.Data.EntityClient" />
</connectionStrings>

そして今、すべてが肉汁のようです。新しいプロジェクト テンプレートを作成して実行し、接続文字列の形式の違いを確認しました。

以下は現在、私の InitializeSimpleMembershipAttribute.cs にあります。

WebSecurity.InitializeDatabaseConnection("DefaultConnection", 
                                         "UserProfile", 
                                         "UserId", 
                                         "UserName", 
                                         true);

私を正しい方向に向けてくれてありがとう。
たくさんの愛。

于 2013-01-02T11:22:46.733 に答える
0

私が見ることができる唯一の問題は、おそらくあなたの " 文字です-代わりに一重引用符を使用してみてください

于 2013-01-02T07:50:17.293 に答える