web-dev-qa-db-ja.com

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

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システムです。

87
bugnuker

私はこのエラーを受け取っていたので、以前の提案をいくつか試しました。次に、内部例外を確認し、ユーザーに対して単純なSQLログイン失敗が発生していることに気付きました。確認するために何か他のもの。

183
junken

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

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

8
Preet Sangha

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

5
Rakesh Singh

MvcMusicStoreアプリでも同様の問題が発生しました。 Web.configの行を「Instance = true」から「Instance = false」に変更しました。この調整なしでも機能する場合がありますが、違いの原因はわかりません。これを読む http://msdn.Microsoft.com/en-us/library/ms254504.aspx は本当に助けにはなりませんでした。

4
xuvion

私は同じ問題を抱えていて、コンテキストのインスタンスの直後に次のコードを追加します(exempleによるオンロード)

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

私は最終的にそれをクラックしました-わずかな野生のガチョウの追跡の後、それは許可によるものだと考えました。

啓示:USE SQL PROFILER

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

SQL Profilerを使用して、報告された障害の前に実行された最後の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)に関連付けられていることを確認します。

enter image description here

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

私の推測では、Model (<Binary data>)列には後方互換性がありません。したがって、The provider did not return a ProviderManifest instanceエラーはデコードできなかったためです。

失うものは何もなく、このテーブルを完全に消去してUpdate-Database -Verboseを実行した後、バックアップして実行しました。

高度な環境にいる場合、または既に本番環境にいる場合、このテーブルを一掃することは解決策ではないかもしれませんが、この方法で仕事に戻ることができました。

2
Simon_Weaver

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

2
user1168945

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

それがあなたと共に働くことを願っています。

2
Telvin Nguyen

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

CodePlex からの引用、これは私と一緒に働いた(visual studio 2013/MVC 5)

1
Feras

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

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

    }

ここでは、web.configファイルに入力した接続文字列の名前を使用して、データベースを作成するようDbContextに指示します。ごくまれに、(SQL Server Management Studioで)データベースを手動で作成する必要があり、それが原因でデータベースが機能するようになりました。

1
John Kelleher

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");

1
GaTechThomas

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

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

0
Dude Pascalou

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

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

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

0
justcoding121

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

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

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

解決策:上記のコードを削除してください。

0
Oleg K

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

EntityFramework Code First ModelsとDataContextは、WebAPIメインプロジェクトとは別のプロジェクトにありました。私のEntity Frameworkプロジェクトはコーディングのどこかでスタートアッププロジェクトとして設定されていたため、移行を実行しているときに「プロバイダーはProviderManifestToken文字列を返しませんでした」...接続の問題が発生しました。

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

0
Sleepless Ninja