2013-11-25 11 views
36

このライン:キーワード:メタデータ

WebSecurity.InitializeDatabaseConnection(connectionStringName: "DefaultConnection", userTableName: "UserProfile", userIdColumn: "UserID", userNameColumn: "UserName", autoCreateTables: true); 

が投げている:

'System.ArgumentExceptionのは' のSystem.Data.dllで発生したが、ユーザーコードで

追加情報を扱っていなかった :サポートされていないキーワード: 'metadata'

私の接続文字列は次のとおりです。

add name="DefaultConnection" connectionString="metadata=res://*/TalyllynModel.csdl|res://*/TalyllynModel.ssdl|res://*/TalyllynModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=***********;initial catalog=********;persist security info=True;user id=*********;password=********;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.SqlClient" /></connectionStrings> 

ない、それは間違ってイムです確認してください。

+0

手動で接続しようとしましたか?あなたは信任状をそのように確認しましたか? –

答えて

47

渡された文字列は有効なデータベース接続文字列ではなく、provider connection stringパラメータにSQL Server接続文字列を含むEF connection stringです。 WebSecurity.InitializeDatabaseConnectionが、これは私に起こったとき、あなたが文字列を解析し、そのProviderConnectionStringプロパティから

+0

私は参照してください。だから、私がここに例を挙げた後、http://msdn.microsoft.com/en-us/library/bb738533(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code -snippet-2。 web.configファイルに接続文字列を保持する必要がありますか、それとも取り除きますか?ありがとう! – ASPCoder1450

+0

おそらく、EF接続文字列が私のボックスではうまく動作しますが、Azureでは動作しません。 –

+1

「Not on Azure」はあまり言いません。接続文字列の種類は環境とは関係ありません。コードが同じときに異なる環境で障害が発生した場合は、ある環境に存在しないサーバー、またはその環境に無効な資格情報を使用しているサーバーを指しているためです。あなたの問題に質問を投稿してください –

40

をデータベース接続文字列を取得するためにEntityConnectionStringBuilderクラスを使用することができ、接続文字列を自分で解析しないようにするには、有効なデータベース接続文字列

を期待します接続文字列があったので、それは:

providerName="System.Data.SqlClient" 

を、それは次のようになります。

providerName="System.Data.EntityClient" 

は、他の回答で述べたようので、それは、EFの接続文字列です。あなたはアズールのアプリケーション設定に保存された接続文字列を使用して、AzureのWebAppのを維持/開発している場合はケースかもしれない -

+5

これは追跡が非常に難しく、ご存知の方が簡単です – jolySoft

+1

うわー...これは解決のために時間を探してしまったので私を救ってくれました!!なぜあなたはEFをインストールしたときに自動的に更新されないのですか?+1 – jom

16

ちょうど(私が遭遇した)別の可能性を追加します。

アプリケーション設定の各接続文字列の横に、接続文字列型のドロップダウンがあります。これは、Entity Frameworkの値に対してこれを 'カスタム'に設定することを忘れて、デフォルト(SQLデータベース)上記のエラーが発生します。

+1

これは私のメタデータキーワードの問題を修正しましたが、現在サポートされていないキーワードがあります: 'サーバー' 更新:サーバの前に"があり、一重引用符に切り替えました。 thx –

0

こんにちは、

私の意見では、(この caseSqlConnectionで)ADO.NETの接続文字列は、「メタデータを使用することはできません。エンティティフレームワークに特定の を使用しています。 1のようなものでなければなりませんADO.NET:

だから、
"data source=KAPS-PC\KAPSSERVER;initial catalog=vibrant;integrated security=True" 

は、それをまとめるために、次の2つの別々の接続文字列、EF およびADO.NETのための1のための1つを必要とします。

源泉:http://forums.iis.net/post/2097280.aspx

1

私は他の誰かが、私がやったのと同じ奇妙なシナリオをこのに走るだけの場合には、別の答えを捨てるつもりです。

他の人が言ってきたように、で起動するには、ADO接続文字列とEFの接続文字列が異なります。

ADO接続文字列には、1つの接続タイプから別の接続タイプへのセミコロン区切りフィールドが多数含まれていますが、通常「データソース= xxx」、「初期カタログ= yyy」などが表示されます。ではなく、「metadata = zzz」を参照してください。

EF接続文字列の構造は同じですが、「metadata = zzz」と「provider connection string = www」があります。「www」はエスケープされたADO接続文字列です。

だから、ADO接続文字列の通常の形式は次のとおりです。

data source=myserver; 
initial catalog=mydatabase; 
Persist Security Info=True; 
User ID=myusername; 
Password=mypassword; 
MultipleActiveResultSets=True 

EF接続文字列の通常の形式ではあるがこの問題に実行されている

metadata=res://*/MyDbContext.csdl| 
    res://*/MyDbContext.ssdl| 
    res://*/MyDbContext.msl; 
provider=System.Data.SqlClient; 
provider connection string=&quot; 
    data source=myserver; 
    initial catalog=mydatabase; 
    Persist Security Info=True; 
    User ID=myusername; 
    Password=mypassword; 
    MultipleActiveResultSets=True; 
    application name=EntityFramework 
    &quot; 

ほとんどの人がいるように見えますEF接続文字列を切り取り、ADO接続文字列が必要な場所に貼り付けました。本質的には、私は同じことをしましたが、そのプロセスはすべてそれほど明確ではありませんでした。

私の場合、EFを使用するWebアプリケーションがあるため、web.configにEF接続文字列が正しく含まれていました。

デプロイメントパッケージを公開しました。デプロイメント時に使用する接続文字列を要求するプロンプトが表示されます。これらは、展開パッケージの生成されたSetParameters.xmlファイルに格納されます。

EF接続文字列を切り取り、パブリッシュダイアログの入力フィールドに貼り付けました。

Webアプリケーションをデプロイしてアクセスしようとしましたが、「キーワードがサポートされていません:メタデータ」というエラーが発生しました。

私が気づいていなかったのは、MSのパブリッシュツールがADO接続文字列を期待していて、それにEF接続文字列を作成するということです。言い換えれば

metadata=res://*/MyDbContext.csdl| 
    res://*/MyDbContext.ssdl| 
    res://*/MyDbContext.msl; 
provider=System.Data.SqlClient; 
provider connection string=&quot; 
    metadata=res://*/XxDbContext.csdl| 
     res://*/XxDbContext.ssdl| 
     res://*/XxDbContext.msl; 
    provider=System.Data.SqlClient; 
    provider connection string=&amp;quot; 
     data source=myserver; 
     initial catalog=mydatabase; 
     Persist Security Info=True; 
     User ID=myusername; 
     Password=mypassword; 
     MultipleActiveResultSets=True; 
     application name=EntityFramework 
     &amp;quot; 
    &quot;" 

、埋め込まれたプロバイダの接続文字列は、EFの接続文字列ではなくADOた:

結果はSetParameters.xml、私の展開web.configファイルはこのように見えた接続文字列を持っていたということでしたEFがそれを使用してデータベースに接続しようとすると、このエラーが発生しました。

つまり、パブリッシュダイアログに接続文字列を貼り付けるときに、コピー元のweb.configの内容が次のものであっても、EF接続文字列ではなくADO接続文字列を貼り付ける必要があります。 EF接続文字列。

EF接続文字列のプロバイダ接続文字列フィールドからADO接続文字列を抽出することができます。これは、ローカル開発で行ったのと同じ接続を展開で使用している場合に必要です。

+0

私はそれを意味するために数回この返信を読まなければなりませんでしたが、何時間も頭を引っかき、「キーワードがサポートされていません」というタイプのメッセージを受け取った後、接続文字列の例が最終的に私の問題を解決しました。うまくいった。 –

0

ここでは、接続文字列からデータベース名&を抽出するために使用するコードを示します。

I はしなかった場合:それはEntity Frameworkの接続文字列だし、もしそうなら、それはその後、SqlConnectionStringBuilderに渡すことができるの「プロバイダ接続文字列」の部分を、抽出した場合、それはチェック方法

お知らせこれを行うと、その厄介な "Keyword Not Supported: Metadata"エラーが発生します。

if (connectionString.ToLower().StartsWith("metadata=")) 
{ 
    System.Data.Entity.Core.EntityClient.EntityConnectionStringBuilder efBuilder = new System.Data.Entity.Core.EntityClient.EntityConnectionStringBuilder(connectionString); 
    connectionString = efBuilder.ProviderConnectionString; 
} 

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectionString); 
DatabaseServer = builder.DataSource;    // eg "MikesServer" 
DatabaseName = builder.InitialCatalog;   // eg "Northwind" 
0

ASP.NETアイデンティティ2を有効にしていると信じていたときと全く同じエラーが発生しました。それらは同じではありません。これにより、ASP.NET Identity 2とは異なるテーブル構造を使用する古いバージョンのID管理が有効になりました(途中で "有効化"する必要はありません)。あなたが意図的に古いロールマネージャを使用して、まだ取得している場合は

あなたが任意の接続文字列を指すように変更することができ、その場合にはあなたの代わりに、データベースのデフォルトのlocaldbを見ているかもしれないエラーは、あなたがしたい:

<roleManager 
 
     enabled="true" 
 
     cacheRolesInCookie="true" 
 
     defaultProvider="OurSqlRoleProvider" 
 
    > 
 
     <providers> 
 
      <add 
 
      connectionStringName="DefaultConnection" 
 
      applicationName="/" 
 
      name="OurSqlRoleProvider" 
 
      type="System.Web.Security.SqlRoleProvider" /> 
 
     </providers> 
 

 
    </roleManager>

あなたはASP.NETアイデンティティ2を使用した後にされている場合は、ここでそれについての記事です: http://johnatten.com/2014/04/20/asp-net-mvc-and-identity-2-0-understanding-the-basics/

0

Azure Web Appの場合、接続文字列タイプが"System.Data.EntityClient"ではありませんが有効です。

enter image description here

+0

これを行うと、「アプリケーションの構成ファイルの接続文字列「myConnection」に必要なproviderName属性が含まれていません」というエラーが表示されます。「... azure関数の設定でプロバイダ名を追加するにはどうすればよいですか?あなたはこれの横に他の設定をしましたか? – batmaci

-1

古いポストが、私の解決策を、

残念ながら、これらは、EDMXで別のプロジェクト(クラスライブラリ)に話Azureの機能を使用して私のためにそれを解決しませんでした。

私はうまくいけば、これは必要としている他の誰かを助けるかもしれない

: base (ConfigurationManager.ConnectionStrings["Entities"].ConnectionString)

: base ("Entities")

を交換Context.CSクラスのコンストラクタを編集する必要がありました。