EF 4.1 istisnası "Sağlayıcı, ProviderManifestToken dizesi döndürmedi"


88

MSDN'de bulunan bir örneği kopyalamaya çalışıyorum. ASP.NET ve EF 4.1 (CTP?) Kullanıyorum. EntityFramework paketini yüklemek için NuGet kullandım.

Şu hatayı alıyorum: The provider did not return a ProviderManifestToken string... ve veritabanı asla oluşturulmadı.

İşte bağlantı dizim:

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

İşte kodum:

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

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

int recordAffected = db.SaveChanges();

İşte benim bağlamım:

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

Bu, VS 2010 SP1 ile tamamen yamalanmış bir SQL 2008 sistemidir.


Modele [Anahtar] 'ı ekledikten sonra, bu sorunu geçmiş gibi görünüyor. Hala başka bir sorunla karşılaşıyorum, ancak bu sorunu çözmüş olabilir.
bugnuker

Ayrıca bağlantı
dizime

Üzerinde çalışırken aynı durum yaşıyorumSqlServerCe.Entity.dll
Nano Taboada

2
Bu istisnayı uyandırabilecek şeyler uğruna - bağlamın adıyla eşleşmesi gereken bağlantı dizesi adındaki yazım hatasını geçerek 20 dakika harcıyorum.
justSteve

Yanıtlar:


184

Bu hatayı alıyordum ve önceki önerilerden birkaçını denedim. Sonra İç İstisnayı kontrol ettim ve kullanıcı için basit bir SQL oturum açma hatası aldığımı fark ettim. Kontrol edilecek başka bir şey.


Benim durumumda sql sunucu şifresinin süresi doldu
mklein

3
Beni doğru yönü gösterdiğin için teşekkürler. SQL Express hizmetim başlatılmadı - ha!
camainc

İyi eski bir iç istisna ... EF'yi yeni bir yedekleme konumuna yönlendirdiğimde DB adımı yanlış anladım ... komik bir şey, InnerEx'i kontrol ettim ve yorumunuz geri dönüp tekrar okumamı sağladı ... tebrikler!
Andy Danger Gagne

Entegre Güvenlik kullanıyordu, IIS AppPool gerekli haklara sahip değildi.
Vincent Vancalbergh

+1 - (Ev ipim değişti) Hata Mesajı: Oturum açma tarafından istenen 'SERVERNAME' sunucusu açılamıyor. IP adresi 'MY_OLD_IP' olan istemcinin sunucuya erişmesine izin verilmiyor. Erişimi etkinleştirmek için SQL Azure Portal'ı kullanın veya bu IP adresi veya adres aralığı için bir güvenlik duvarı kuralı oluşturmak üzere ana veritabanında sp_set_firewall_rule çalıştırın. Bu değişikliğin etkili olması beş dakika kadar sürebilir. \ R \ n'MYADMINACCT 'kullanıcısı için giriş başarısız oldu. \ R \ nBu oturuma' GUID 'izleme kimliği atandı. Yardıma ihtiyacınız olduğunda müşteri desteğine bu izleme kimliğini verin. "}
Dylan Hayes

8

Bu bazen bağlantı dizesini Visual Studio'daki yanlış projenin app.config dosyasına yerleştirdiğinizde ortaya çıkabilir.

Örneğin, EF 4.1 (yayımlanan sürüm) projesi + WCF Veri Hizmeti projesinde bu sorunu yaşadım ve kullanıldığı Veri Hizmetleri Projesi'nde belirtilmiş bir bağlantı dizesi olmadığını fark ettim.


Bu benim çözümümdü. Başlangıç ​​projesine uygun bağlantı dizesini koymam gerekiyordu.
MickJuice

5

Aynı hatayı yaşıyordum ve aslında belirtilen sunucu için oturum açma başarısız oldu. Yapılandırma bağlantı dizesinden "Entegre Güvenlik" özniteliğini kaldırdım ve işe yaradı.


Bu benim için çalıştı. Diğer çözümler işe yaramıyorsa, bu sorunu yaşayan başka biri bunu denemelidir.
Justin

Bu hata, makinemde SQL Express hizmeti kapatıldığında ortaya çıktı.
John M

4

Aynı sorunu yaşadım ve aşağıdaki kodu bağlamımın örneğinin hemen sonrasına ekliyorum (örnek olarak yüklenme)

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

4

MvcMusicStore uygulamasıyla benzer bir sorun yaşadım. Web.config dosyasında "Instance = true" olan bir satırı "Instance = false" olarak değiştirdim. Bazen bu ince ayar olmadan çalışır, ancak farka neyin sebep olduğunu bilmiyorum. Bu http://msdn.microsoft.com/en-us/library/ms254504.aspx'i okumak gerçekten yardımcı olmadı.


Şaşırtıcı ... bu benim için doğru çözümdü. Neden olduğuna dair hiçbir fikrim yok.
Kees C.Bakker

2

Bazı izin nedenleriyle, EF veritabanı bağlantısı oluşturamaz. Bir gün hep aynı problemle karşılaştım. Sonunda aşağıdaki çözümü denedim ve işe yaradı: a / Open IIS (IIS 7 kullanıyorum) b / Web sitesinin kullandığı gelişmiş appool ayarlarını açın (Örn: DefaultAppPool) c / Process Model grubuna bakın, Kimlik değerini değiştirin "Localsystem" e

Umarım sizinle çalışır.


2

Ben de aynı sorunu yaşıyordum ...
benim için işe
yarayan çözüm şuydu: istemci ağ yapılandırma aracını çalıştırın (Çalıştır'a cliconfg yazın)
ve TCP / IP'nin etkinleştirildiğinden emin olun ..


2

Sonunda onu kırdım - izinlere bağlı olduğunu düşünerek hafif bir vahşi kaz kovalamacasından sonra.

Vahiy: SQL PROFILER KULLANIN

(Not: Yakın zamanda EF6'dan EF5'e düştüm)

SQL Profiler'ı kullanarak, bildirilen hatadan önce çalıştırılan son SQL'i hızlı bir şekilde buldum:

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

Şuna bakın - göçlerle ilgili bir şey. Tabloya bakıyor __MigrationHistory- yarattığını bile fark etmemiştim (CSPROJ'umdaki Göçleri zaten silmiştim) ve bunu temizledim.

Bu yüzden bu tablonun satırlarını kaldırıyorum ve belirli bir ürün sürümüne (v6) bağlı olduğunu görüyorum.

görüntü açıklamasını buraya girin

Aslında EF6'dan (ilk etapta kurmayı düşünmediğim) EF5'e (iskele ile daha uyumlu) ve problemler başladığında düşürdüm.

Tahminim, Model (<Binary data>)sütunun geriye dönük olarak uyumlu olmadığıdır - bu nedenle, The provider did not return a ProviderManifest instancekodunu çözemediği için hata.

Kaybedecek hiçbir şeyim yoktu ve bu masayı tamamen sildim ve koştum Update-Database -Verboseve sonra tekrar kurulup koşmaya başladım .

Gelişmiş bir ortamdaysanız veya halihazırda üretim aşamasındaysanız, bu tabloyu silmek çözüm olmayabilir, ancak bu şekilde hemen işe dönmeme izin verdi.


__MigrationsHistory tablosunu tamamen bıraktım ve Add-Migrationve ile yeniden düzenledim Update-Database -Verbose -Force. Burada bir komut referans var coding.abel.nu/2012/03/ef-migrations-command-reference
Simon_Weaver

önemli olan nokta bunun yalnızca bir izin hatası olmaması
Simon_Weaver

1

Visual Studio 11 Beta'yı EF4.1 ve ASP.NET MVC ile kullanırken, bulana kadar neredeyse saçımı çıkardım

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

Sorunumu çözmek için Application_Start'a girdim ve değiştirdim

Database.DefaultConnectionFactory = new SqlConnectionFactory ("Veri Kaynağı = (localdb) \ v11.0; Integrated Security = True; MultipleActiveResultSets = True");

-e

Database.DefaultConnectionFactory = new SqlConnectionFactory ( @ "Veri Kaynağı = (localdb) \ v11.0; Integrated Security = True; MultipleActiveResultSets = True");


Database.DefaultConnectionFactory = new SqlConnectionFactory(@"Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");Mainmehod'uma eklendi , şimdi bir cazibe gibi çalışıyor! Çok teşekkür ederim.
rotgers

1

Bu hata yalnızca .edmx dosyası açıkken mevcuttur ve dosya tekrar kapatılır kapatılmaz kaybolur.

CodePlex'ten alınan bu alıntı, benim için çalıştı (visual studio 2013 / MVC 5)


Benimle de çalıştı. Edmx dosyasını kapatıp yeniden açmayı denedim. Çalıştı.
Rohit

1

EF Code First kullanıyorsanız göz önünde bulundurmanız gereken bir diğer şey de, bazen DbContext sınıfınıza yedekleme veritabanını otomatik olarak oluşturmamasıdır. Çözüm, kendi bağlantı dizenizi eklemektir - Şablon olarak Basit Üyelik Sağlayıcısını destekleyen kullanıcı / kayıt veritabanını işlemek için mevcut olabilecek bağlantı dizesini kullanabilirsiniz. Son olarak, oluşturduğunuz DbContext sınıfı için varsayılan bir kurucu eklemeniz gerekecek:

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

    }

Burada, web.config dosyanıza girdiğiniz şekliyle bağlantı dizesinin adı, veritabanını oluşturmak için DbContext'i yönlendirmek için kullanılır. Çok nadiren, veritabanını (SQL Server Management Studio'da) manuel olarak oluşturmak zorunda kaldım ve bu da çalışmasını ister.


0

Bir çözümde birden fazla projem var ve her projeye farklı zamanlarda EF ekledim. Bazı makinelerde çalışıyordu ve bazılarında yukarıda belirtilen hatayla başarısız oldu. Projemin bazı app.config dosyalarının buna sahip olduğunu fark etmem biraz zaman aldı:

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

LocalDb (yeni "sql express" gibi) kullanıyorsanız bu sorun olmaz, ancak belirli bir sunucuya sahip değilseniz ve normal bir SQL kullanıyorsanız tamamen yanlıştır.

Çözüm: Yukarıdaki kodu kaldırın.


0

Bunun nedeni SQL sunucusuna bağlantının başarısız olmasıdır.

İşlemi çalıştırdığınız Kullanıcı Hesabı'nın SQL Server'a erişimi olduğundan emin olun.

DbContext'i ana iş parçacığından oluşturduysanız (bağımlılık Enjeksiyonu kullanmak gibi) ve sonra başka bir kullanıcının kimliğine bürünüyorsanız, bu hata ortaya çıkar. Çözüm, yeni iş parçacığı veya yeni Kimliğe Bürünme bağlamı içinde DbContext oluşturmak olacaktır.


0

Visual Studio'nun tüm örneklerini kapattım ve çözümümü yeniden açtım.

Gerçekte ne olduğunu bilmiyorum, ancak aynı çözümü iki farklı yerel çalışma alanından açtım (biri yerel değişikliklerimle, biri değiştirilmemiş depo kaynak koduyla). Postgres DB, Entity Framework 6, Visual Studio 2013 ve ASP.NET MVC 5 ile çalışıyorum.


0

Varlık çerçevesi için bir hatam vardı, ancak yukarıdaki yanıtların hiçbiri sonunda işe yarayan çözüme uymadı.

My EntityFramework Code First Models ve DataContext, WebAPI Ana Projemden Ayrı bir projedeydi. Entity Framework Projem kodlama hattının altında bir yerde başlangıç ​​projesi olarak belirlendi ve bu nedenle bir geçişi çalıştırırken "Sağlayıcı bir ProviderManifestToken dizesi döndürmedi" ... bağlantı sorunu alıyordum.

DB'ye Bağlantı Dizesi WebAPI Ana projesindeki Web.config dosyasında bulunduğundan, geçiş çalıştırırken bağlantı dizesinin alınmadığı ortaya çıktı. WebAPI projesini başlangıç ​​projem olarak ayarlayarak başarılı bir şekilde bağlanabildim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.