MSSQL klaida 'Atidarant nepavyko atidaryti pagrindinio teikėjo'

Naudojau .mdf prisijungimui prie databazės ir entityClient. Dabar noriu pakeisti prisijungimo eilutę taip, kad nebūtų .mdf failo.

Ar ši prisijungimo eilutė yra teisinga?

<connectionStrings>
   <!--<add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQL2008;AttachDbFilename=|DataDirectory|\NData.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />-->
   <add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQL2008;Initial Catalog=NData;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />

Nes visada gaunu klaidą:

The underlying provider failed on Open

Sprendimas

Aš turėjau šią klaidą ir radau keletą sprendimų:

Žvelgiant į jūsų ryšio eilutę, ji atrodo tinkama. Radau šį tinklaraščio įrašą, problema ta, kad jie naudojo Integrated Security. Jei naudojate IIS, jūsų IIS naudotojui reikia prieigos prie duomenų bazės.

Jei naudojate Entity Framework su transakcijomis, Entity Framework automatiškai atidaro ir uždaro ryšį su kiekvienu duomenų bazės iškvietimu. Taigi naudodami transakcijas bandote išskaidyti transakciją per kelis ryšius. Tai pakyla iki MSDTC.

(Daugiau informacijos rasite šioje nuorodoje).

Pakeitus mano kodą į toliau pateiktą, problema buvo išspręsta:

using (DatabaseEntities context = new DatabaseEntities())
{
    context.Connection.Open();
    // the rest
}
Komentarai (7)

context.Connection.Open() nepadėjo išspręsti mano problemos, todėl pabandžiau įjungti "Allow Remote Clients" DTC konfigūracijoje, klaidos nebeliko.

Windows 7 galite atidaryti DTC konfigūraciją paleidę dcomcnfg, Component Services -> Computers -> My Computer -> Distributed Transaction Coordinator -> Dešiniuoju pelės mygtuku spustelėkite Local DTC -> Security.

Komentarai (2)

Nustatau, kad problema buvo ta, kad viename iš šių variantų turėjau serverio kelią per ryšio eilutę:

SERVER\SQLEXPRESS
SERVER

Kai iš tikrųjų turėčiau:

.\SQLEXPRESS

Dėl kažkokių priežasčių gavau klaidą, kai buvo sunku rasti SQL egzempliorių.

Komentarai (3)