2

次の接続文字列があるとします。

<add name="PrimaryDBConnectionString" connectionString="metadata=res://*/;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=10.1.1.101;Initial Catalog=primary;Persist Security Info=True;User ID=myuserid;Password=mypassword;MultipleActiveResultSets=True;Application Name=EntityFramework&quot;" />

DAL で次の接続を開こうとしています。

        using (PrimaryDBContext ctx = new PrimaryDBContext(ConfigurationManager.ConnectionStrings["PrimaryDBConnectionString"].ToString()))
        {
            try
            {
                ctx.Connection.Open();
                var result = ctx.sq_newsfeed_GetProfileByID(profileID);

私が得るエラーは次のとおりです。

基になるプロバイダーが Open で失敗しました

私はEF接続文字列をいじって、すべてのプロバイダープレフィックスを「metadata = res://* /;」に置き換えました。しかし、まだ行きません。

誰でもこれに光を当てることができますか?

ありがとう。

- アップデート -

返信ありがとうございます... UIから新しいdb接続を作成し、ニーズに合わせて接続文字列を変更するだけで終わりました:

<add name="PrimaryEntities" connectionString="metadata=res://*/PrimaryModel1.csdl|res://*/PrimaryModel1.ssdl|res://*/PrimaryModel1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=10.99.108.42;initial catalog=primary;user id=dbuserID;password=somepw;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

メタデータ部分を保持しました。トリックは、.csdl、.ssdl、および .msl ファイル名のプレフィックスがデータベース コンテキストと一致することを確認することでした。

4

1 に答える 1

2

Code First/DbContext を使用していますか (質問は entity-framework-4.1 で提出されます)? その場合、接続文字列は通常の接続文字列にする必要があります-次のようなものです:

<add name="PrimaryDBConnectionString" providerName="System.Data.SqlClient"  connectionString="Data Source=(localdb)\v11.0;Initial Catalog=squirtprimary;Persist Security Info=True;Integrated Security=true;MultipleActiveResultSets=True;Application Name=EntityFramework" />    

(また、構成マネージャーで魔法を行う必要はありません。次のように、ctor に接続文字列の名前を指定するだけで済みます。

"name=PrimaryDBConnectionString"

そしてそれはうまくいくはずです)

一方、DbContext ではなく ObjectContext を使用している場合 (発生する例外はこれを示します。接続文字列が間違っているか、providerName パラメーターが欠落しているという例外は発生しませんでした)。次に、EF なしでデータベースに接続できるかどうかを確認する必要があります。いくつかのヒント:

  • IP アドレスをデータ ソースとして使用します。これがリモート サーバーの場合、外部クライアントの受け入れを有効にしていますか? (AFAIRこれはデフォルトでSql Serverで無効になっています)
  • 認証に user/pwd を使用しています - これらは正しいですか?

上記を確認する方法の 1 つは、マシンで Sql Server Management Studio を開き、接続文字列にあるデータを提供することです。

表示されている例外は、メタデータ部分に問題があることを示しているわけではありません。具体的には、データベースへの接続を開くことができないということです。

于 2012-06-22T19:09:48.293 に答える