Използвах .mdf
за свързване към база данни
и entityClient
. Сега искам да променя стринга за свързване, така че да няма файл .mdf
.
Правилно ли е следното connectionString
?
<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" />
Защото винаги получавам грешката:
Основният доставчик се провали при Open
Имах тази грешка и намерих няколко решения:
Поглеждайки низът на връзката ви, той изглежда валиден. Намерих тази публикация в блога, проблемът тук е, че те използват Integrated Security. Ако работите с IIS, вашият потребител на IIS се нуждае от достъп до базата данни.
Ако използвате Entity Framework с транзакции, Entity Framework автоматично отваря и затваря връзка при всяко извикване на базата данни. Така че, когато използвате транзакции, вие се опитвате да разпределите транзакцията върху няколко връзки. Това води до MSDTC.
(Вижте тази препратка за повече информация)
Промяната на кода ми със следното го оправи:
using (DatabaseEntities context = new DatabaseEntities())
{
context.Connection.Open();
// the rest
}
context.Connection.Open()
не помогна за решаването на проблема ми, така че опитах да разреша "Allow Remote Clients" в конфигурацията на DTC, вече няма грешка.
В Windows 7 можете да отворите конфигурацията на DTC, като стартирате dcomcnfg, Component Services -> Computers -> My Computer -> Distributed Transaction Coordinator -> Десен бутон на мишката върху Local DTC -> Security.
Открих, че проблемът е в това, че пътят до сървъра е включен в низ за свързване в един от тези варианти:
SERVER\SQLEXPRESS
SERVER
Когато всъщност трябваше да имам:
.\SQLEXPRESS
По някаква причина получавах грешката винаги, когато се затрудняваше да открие инстанцията на SQL.