EF 4.1例外「プロバイダーはProviderManifestToken文字列を返しませんでした」


88

MSDNにある例を再現しようとしています。ASP.NETとEF 4.1(CTP?)を使用しています。NuGetを使用してEntityFrameworkパッケージをインストールしました。

このエラーが発生します:The provider did not return a ProviderManifestToken string...そしてデータベースは作成されません。

これが私の接続文字列です:

<add name="HospitalContext"
   connectionString=
   "data source=.\SQLExpress;initial catalog=NewTestDB;integrated security=True;"
   providerName="System.Data.SqlClient"/>

これが私のコードです:

var pat = new Patient { Name = "Shane123132524356436435234" };
db.Patients.Add(pat);

var labResult = new LabResult { Result = "bad", Patient = pat };

int recordAffected = db.SaveChanges();

これが私のコンテキストです:

public class HospitalContext : DbContext
{
    static HospitalContext()
    {
        Database.SetInitializer(new HostpitalContextInitializer());
    }

    public DbSet<Patient> Patients { get; set; }
    public DbSet<LabResult> LabResults { get; set; }
}

public class HostpitalContextInitializer :
             DropCreateDatabaseIfModelChanges<HospitalContext>
{
    protected override void Seed(HospitalContext context)
    {
        context.Patients.Add(new Patient { Name = "Fred Peters" });
        context.Patients.Add(new Patient { Name = "John Smith" });
        context.Patients.Add(new Patient { Name = "Karen Fredricks" });
    }
}

これは、VS 2010 SP1が完全にパッチされたSQL 2008システムです。


[Key]をモデルに追加すると、その問題を回避して機能するように見えます。私はまだ別の問題を抱えていますが、これで問題が解決した可能性があります。
Bugnuker

また、接続文字列に「Intergrated security = true」を追加した可能性もあります...
bugnuker

作業するときにも同じ例外が発生しますSqlServerCe.Entity.dll
Nano Taboada

2
この例外を引き起こす可能性のあるもののために、私はコンテキストの名前と一致する必要がある接続文字列の名前のタイプミスを20分間見つめています。
justSteve

回答:


184

このエラーが発生し、以前の提案をいくつか試しました。次に、内部例外を確認したところ、ユーザーに対して単純なSQLログインエラーが発生していることがわかりました。確認するべき他の何か。


私の場合、SQLサーバーのパスワードが期限切れでした
mklein

3
私を正しい方向に向けてくれてありがとう。SQL Expressサービスが開始されませんでした。
camainc 2011年

良いol内部の例外... EFを新しいバックアップの場所にポイントすると、DB名が間違っていました...面白いことに、InnerExをチェックし、あなたのコメントで戻ってそれを読み直しました...
Andy Danger Gagne、2011

統合セキュリティを使用していたため、IIS AppPoolには必要な権限がありませんでした。
Vincent Vancalbergh 2012

+1-(ホームIPが変更されました)エラーメッセージ:ログインで要求されたサーバー 'SERVERNAME'を開けません。IPアドレス「MY_OLD_IP」のクライアントはサーバーへのアクセスを許可されていません。アクセスを有効にするには、SQL Azureポータルを使用するか、masterデータベースでsp_set_firewall_ruleを実行して、このIPアドレスまたはアドレス範囲のファイアウォールルールを作成します。この変更が有効になるまで最大5分かかる場合があります。\ r \ nユーザー「MYADMINACCT」のログインに失敗しました。\ r \ nこのセッションには「GUID」のトレースIDが割り当てられています。サポートが必要な場合は、このトレースIDをカスタマーサポートに提供してください。」}
Dylan Hayes

8

これは、Visual Studioの間違ったプロジェクトのapp.config内に接続文字列を配置したときに発生することがあります。

たとえば、EF 4.1(リリースバージョン)プロジェクト+ WCF Data Serviceプロジェクトでこの問題が発生し、Data Servicesプロジェクトで使用されている接続文字列が指定されていないことに気付きました。


これが私の解決策でした。スタートアッププロジェクトに適切な接続文字列を配置する必要がありました。
MickJuice 2014年

5

同じエラーが発生しましたが、実際には、指定されたサーバーのログインに失敗しました。「統合セキュリティ」属性を構成接続文字列から削除し、機能しました。


これでうまくいきました。他の解決策が機能しない場合は、この問題を抱えている他の人がこれを試してください。
Justin

このエラーは、マシンでSQL Expressサービスがオフになっている場合に発生しました。
John M

4

同じ問題があり、コンテキストのインスタンスの直後に次のコードを追加します(例:onload)

context.Database.Connection.ConnectionString = @"Data Source=.\SQLExpress;Initial Catalog=Test;Integrated Security=True";

4

MvcMusicStoreアプリでも同様の問題がありました。Web.configの行を "Instance = true"から "Instance = false"に変更しました。この調整を行わなくても動作することがありますが、何が原因なのかはわかりません。このhttp://msdn.microsoft.com/en-us/library/ms254504.aspxを読んで も、実際には役に立ちませんでした。


すばらしい...これは私にとって適切な解決策でした。なぜか分かりません。
キースC.バッカー

2

許可の特定の理由により、EFはデータベース接続を作成できません。私は一日中同じ問題に直面していました。最後に私は次の解決策を試してみましたが、うまくいきました:a / IISを開きます(IIS 7を使用しています)b / Webサイトが使用していたappoolの詳細設定を開きます(例:DefaultAppPool)c /プロセスモデルグループを見て、ID値を変更します「Localsystem」へ

うまくいきますように。


2

私はちょうど同じ問題を抱えていました...
私のために働いた解決策は
、クライアントのネットワーク構成ツール(Runでcliconfgと入力)
を実行し、TCP / IPが有効になっていることを確認することでした。


2

私はついにそれをクラックしました-許可のためであると思ったわずかな野生のガチョウ追跡の後、

Revelation:USE SQL PROFILER

(注:私は最近EF6からEF5にダウングレードしました)

SQLプロファイラーを使用して、失敗が報告される前に実行された最後のSQLをすばやく見つけました。

SELECT TOP (1) 
[Project1].[C1] AS [C1], 
[Project1].[MigrationId] AS [MigrationId], 
[Project1].[Model] AS [Model]
FROM ( SELECT 
    [Extent1].[MigrationId] AS [MigrationId], 
    [Extent1].[Model] AS [Model], 
    1 AS [C1]
    FROM [dbo].[__MigrationHistory] AS [Extent1]
)  AS [Project1]
ORDER BY [Project1].[MigrationId] DESC

よく見てください-マイグレーションと関係があります。それは__MigrationHistoryテーブルを探しています-それが作成されたことにも気づかなかった(すでにCSPROJでMigrationsを一掃していた)ので、それをクリアしました。

したがって、そのテーブルの行をプルアップすると、特定の製品バージョン(v6)に関連付けられていることがわかります。

ここに画像の説明を入力してください

私は実際にEF6(最初にインストールするつもりではなかった)からEF5(足場との互換性が高い)にダウングレードし、問題が発生したときにそれをダウングレードしました。

私の推測では、Model (<Binary data>)列には下位互換性がないため、The provider did not return a ProviderManifest instanceデコードできなかったため、エラーが発生します。

失うものは何もなかったので、このテーブルを完全に一掃して実行しUpdate-Database -Verbose、その後再び稼働しました。

高度な環境にいる場合、またはすでに本番環境にいる場合は、このテーブルを一掃することは解決策ではない可能性がありますが、この方法で私は仕事に戻ることができました。


最終的に__MigrationsHistoryテーブルを完全に削除しAdd-Migration、およびで再足場しましたUpdate-Database -Verbose -Force。ここに、コマンドリファレンスのコーディングがあり
2012/03 /

重要な点は、これがアクセス許可のエラーだけではないということです
Simon_Weaver 2013

1

Visual Studio 11 BetaをEF4.1とASP.NET MVCで使用しているときに、見つかるまで髪の毛をほとんど引っ張り出しました。

http://connect.microsoft.com/VisualStudio/feedback/details/740623/asp-net-mvc-4-default-connection-string-improperly-escaped

私の問題を解決するために、Application_Startに入り、変更しました

Database.DefaultConnectionFactory = new SqlConnectionFactory( "Data Source =(localdb)\ v11.0; Integrated Security = True; MultipleActiveResultSets = True");

Database.DefaultConnectionFactory = new SqlConnectionFactory(@ "Data Source =(localdb)\ v11.0; Integrated Security = True; MultipleActiveResultSets = True");


Database.DefaultConnectionFactory = new SqlConnectionFactory(@"Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");私のMain方法に追加されました、今それは魅​​力のように動作します!本当にありがとうございました。
ロジャーズ

1

このエラーは、.edmxファイルが開いているときにのみ発生し、ファイルを再び閉じるとすぐに消えます。

CodePlexからのこの引用 、これは私と一緒に機能しました(ビジュアルスタジオ2013 / MVC 5)


私も一緒に働きました。edmxファイルを閉じて再度開いてみました。働いた。
Rohit

1

EF Code Firstを使用している場合に考慮すべきもう1つのことは、DbContextクラスへのバッキングデータベースが自動的に作成されない場合があることです。解決策は、独自の接続文字列を追加することです-存在する可能性のある接続文字列を使用して、シンプルメンバーシッププロバイダーをサポートするユーザー/登録データベースをテンプレートとして処理できます。最後に、作成したDbContextクラスのデフォルトコンストラクターを追加する必要があります。

public ChaletDb():base("ChaletConnection")
    {

    }

ここでは、web.configファイルに入力した接続文字列の名前を使用して、データベースを作成するようにDbContextに指示します。非常にまれに、(SQL Server Management Studioで)データベースを手動で作成しなければならなかったため、データベースを機能させることができました。


0

ソリューションに複数のプロジェクトがあり、各プロジェクトにEFを異なる時間に追加しました。一部のマシンでは機能し、一部のマシンでは前述のエラーで失敗しました。プロジェクトのapp.configにこれが含まれていることに気づくのにしばらく時間がかかりました:

    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="v11.0" />
  </parameters>
</defaultConnectionFactory>

これは、LocalDb(新しい「sql express」のような)を使用している場合は問題ありませんが、その特定のサーバーをインストールしておらず、通常のSQLを使用している場合は完全に間違っています。

解決策:上記のコードを削除します。


0

これは、SQLサーバーへの接続に失敗したためです。

プロセスを実行しているユーザーアカウントがSQL Serverにアクセスできることを確認します。

親スレッドからDbContextを生成した場合(依存関係インジェクションを使用するなど)、別のユーザーに成り代わっている場合、このエラーが発生します。解決策は、新しいスレッドまたは新しい偽装コンテキスト内にDbContextを生成することです。


0

Visual Studioのすべてのインスタンスを閉じて、ソリューションを再び開きました。

本当に何が起こったのかはわかりませんが、2つの異なるローカルワークスペース(1つはローカルの変更、もう1つは変更されていないリポジトリのソースコード)から同じソリューションを開きました。私はpostgres DB、Entity Framework 6、Visual Studio 2013、ASP.NET MVC 5を使用しています。


0

エンティティフレームワークにエラーがありましたが、上記の回答のいずれも、最終的に機能するソリューションに適合しませんでした。

EntityFrameworkコードファーストモデルとDataContextは、WebAPIメインプロジェクトとは別のプロジェクトにありました。エンティティフレームワークプロジェクトのコーディングラインのどこかがスタートアッププロジェクトとして設定されていたため、移行を実行していたときに、「プロバイダーがProviderManifestToken文字列を返さなかった」という接続の問題が発生しました。

DBへのConnectionStringがWebAPIメインプロジェクトのWeb.configファイルにあるため、移行を実行しているときに接続文字列が取得されていなかったことがわかります。WebAPIプロジェクトをstartProjectとして設定することで、正常に接続できました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.