Používal som .mdf
na pripojenie k databáze
a entityClient
. Teraz chcem zmeniť reťazec pripojenia tak, aby neexistoval súbor .mdf
.
Je nasledujúci connectionString
správny?
<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" />
Pretože vždy dostanem chybu:
Základný poskytovateľ zlyhal pri otvorení
Mal som túto chybu a našiel som niekoľko riešení:
Pri pohľade na reťazec pripojenia sa zdá, že je platný. Našiel som tento príspevok na blogu, problém tu spočíva v tom, že používali Integrated Security. Ak používate IIS, váš používateľ IIS potrebuje prístup k databáze.
Ak používate Entity Framework s transakciami, Entity Framework automaticky otvára a zatvára spojenie pri každom volaní databázy. Takže pri používaní transakcií sa snažíte rozložiť transakciu na viacero spojení. Tým sa povýši na MSDTC.
(Viac informácií nájdete v tomto odkaze).
Zmena môjho kódu na nasledujúci to vyriešila:
using (DatabaseEntities context = new DatabaseEntities())
{
context.Connection.Open();
// the rest
}
context.Connection.Open()
nepomohlo vyriešiť môj problém, tak som skúsil zapnúť "Allow Remote Clients" v konfigurácii DTC, už žiadna chyba.
Vo windows 7 môžete otvoriť konfiguráciu DTC spustením dcomcnfg, Component Services -> Computers -> My Computer -> Distributed Transaction Coordinator -> Right click to Local DTC -> Security.
Zistil som, že problém bol v tom, že som mal cestu k serveru v reťazci pripojenia v jednom z týchto variantov:
SERVER\SQLEXPRESS
SERVER
Keď som v skutočnosti mal mať:
.\SQLEXPRESS
Z nejakého dôvodu som dostal chybu vždy, keď to malo problém nájsť inštanciu SQL.