słowo kluczowe nie jest obsługiwane źródło danych

82

Mam aplikację asp.net-mvc z domyślną bazą danych członkostwa. Uzyskuję do niego dostęp przez ADO.NET Entity Framework.

Teraz chcę go przenieść do IIS, ale pojawiło się kilka problemów. Musiałem zainstalować SQL Server Management Studio, stworzyć nową bazę danych, zaimportować tam wszystkie dane z poprzedniego pliku .MDF. Jedyne, co pozostało do zrobienia (o ile wiem), to zmienić parametry połączenia. Jednak nie mam z tym doświadczenia i ciągle otrzymuję słowo kluczowe nieobsługiwane: „źródło danych”. wyjątek. Oto moje parametry połączenia:

<add name="ASPNETDBEntities" 
     connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;" 
     providerName="System.Data.EntityClient" />

Jakieś pomysły, co się stało?

Trimack
źródło
Wystąpił ten błąd, gdy wybrano niewłaściwy projekt startowy, więc VS nie mógł znaleźć moich parametrów połączenia. Upewnij się, że wybrano projekt startowy z app.config.
wnbates

Odpowiedzi:

147

To, co masz, to prawidłowe parametry połączenia ADO.NET - ale NIE są to prawidłowe parametry połączenia Entity Framework.

Parametry połączenia EF wyglądałyby mniej więcej tak:

<connectionStrings> 
  <add name="NorthwindEntities" connectionString=
     "metadata=.\Northwind.csdl|.\Northwind.ssdl|.\Northwind.msl;
      provider=System.Data.SqlClient;
      provider connection string=&quot;Data Source=SERVER\SQL2000;Initial Catalog=Northwind;Integrated Security=True;MultipleActiveResultSets=False&quot;" 
      providerName="System.Data.EntityClient" /> 
</connectionStrings>

Brakuje wszystkich elementów metadata=i providerName=w parametrach połączenia EF ...... masz w zasadzie tylko to, co jest zawarte w provider connection stringczęści.

Za pomocą projektanta EDMX należy utworzyć prawidłowe parametry połączenia EF w pliku web.config lub app.config.

Marc

AKTUALIZACJA: OK, rozumiem, co próbujesz zrobić: potrzebujesz drugiego ciągu połączenia „ADO.NET” tylko dla bazy danych użytkowników / członkostwa ASP.NET. Twój ciąg jest w porządku, ale nazwa providerName jest błędna - musiałby to być „System.Data.SqlClient” - to połączenie nie korzysta z ENtity Framework - nie określaj więc dla niego „EntityClient”!

<add name="ASPNETMembership" 
     connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;" 
     providerName="System.Data.SqlClient" />

Jeśli określisz parametry połączenia providerName=System.Data.EntityClient==> Entity Framework (z metadanymi = i wszystkim).

Jeśli potrzebujesz i określ providerName=System.Data.SqlClient==> proste parametry połączenia ADO.NET SQL Server bez wszystkich dodatków EF

marc_s
źródło
W rzeczywistości tak się stało, ale otrzymuję wyjątek Nie można otworzyć fizycznego pliku „C: \ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf”. Błąd systemu operacyjnego 5: „5 (nie udało się pobrać tekstu tego błędu. Przyczyna: 15105)”. Próba dołączenia automatycznie nazwanej bazy danych dla pliku C: \ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf nie powiodła się. Baza danych o tej samej nazwie istnieje, nie można otworzyć określonego pliku lub znajduje się w udziale UNC. Z niektórych źródeł pomyślałem, że to źle… W każdym razie dziękuję.
Trimack
Nie jestem pewien, czy rozumiem problem z drugim ciągiem połączenia. Powinienem zostawić ten wygenerowany przez projektanta i dodać ASPNETMembership, który mi napisałeś?
Trimack
Jeśli masz encje w projektancie EDMX - należy uzyskać do nich dostęp za pomocą „EntityClient” i parametrów połączenia EF. Jeśli używasz „gotowego” systemu członkostwa ASP.NET, NIE jest on częścią modelu EF, więc podczas tworzenia parametrów połączenia dla bazy danych członkostwa ASP.NET nie możesz używać „EntityClient” jako dostawca - użyj SqlClient.
marc_s
Więc tak - trzeba zarówno - ciąg połączenia EF system EDMX wygenerowany dla Ciebie, PLUS a drugi - normalny ciąg połączenia ADO.NET - dla systemu członkostwa ASP.NET.
marc_s
1
Właśnie dałem Ci setne głosy za na Twój post. Wesołych Świąt :)
RBT
7

Ten problem może wystąpić, gdy odwołujesz się do parametrów połączenia web.config (lub app.config) według indeksu ...

var con = ConfigurationManager.ConnectionStrings[0].ConnectionString;

Ciąg połączenia oparty na zera nie zawsze jest tym w pliku konfiguracyjnym, ponieważ domyślnie dziedziczy inne z wyższych poziomów stosu .

Zalecane metody to dostęp do połączenia według nazwy ...

var con = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString;

lub najpierw wyczyść element connnectionStrings w pliku konfiguracyjnym ...

<connectionStrings>
    <clear/>
    <add name="MyConnection" connectionString="...
Baldy
źródło
2

Miałem ten sam problem.
ale ten kod działa dobrze, spróbuj.

<add name="MyCon" connectionString="Server=****;initial catalog=PortalDb;user id=**;password=**;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
Satish Singh
źródło
0

Miałem ten problem, kiedy zacząłem używać Entity Framework, stało się, gdy nie zmieniłem połączenia starego serwera SQL na połączenie EntityFrameWork.

Rozwiązanie: w pliku, w którym następuje połączenie przez plik web.config "add name =" Entities "connectionString = XYZ", upewnij się, że odnosisz się do właściwego połączenia, w moim przypadku musiałem to zrobić

        public static string MyEntityFrameworkConnection
    {
        get
        {
             return ConfigurationManager.ConnectionStrings["Entities"].ConnectionString;
        }

    }

wywołać MyEntityFrameworkConnection zawsze, gdy trzeba nawiązać połączenie.

private string strConnection= Library.DataAccessLayer.DBfile.AdoSomething.MyEntityFrameworkConnection;

uwaga: połączenie w pliku web.config zostanie wygenerowane automatycznie podczas dodawania modelu Entity do rozwiązania.

Mubarak
źródło
0

Wiem, że to stary post, ale ostatnio pojawił się ten sam błąd, więc warto, oto inne rozwiązanie:

Zwykle jest to błąd parametrów połączenia, sprawdź format parametrów połączenia, możesz wyszukać „łańcuch połączenia struktury jednostki” lub postępować zgodnie z powyższymi sugestiami.

Jednak w moim przypadku mój ciąg połączenia był w porządku, a błąd był spowodowany czymś zupełnie innym, więc mam nadzieję, że to komuś pomoże:

  1. Najpierw miałem błąd EDMX : w EDMX była nowa tabela bazy danych, a tabela nie istniała w mojej bazie danych (zabawna rzecz, błąd nie był zbyt oczywisty, ponieważ nie był wyświetlany w moim EDMX lub oknie wyjściowym zamiast tego został schowany w Visual Studio w oknie „Lista błędów” w „Ostrzeżeniach”). Rozwiązałem ten błąd, dodając brakującą tabelę do mojej bazy danych. Ale tak naprawdę byłem zajęty próbą dodania procedury składowanej i nadal otrzymywałem błąd `` źródła danych '', więc zobacz poniżej, jak go rozwiązać:

  2. Błąd procedury składowanej: Próbowałem dodać procedurę składowaną i za każdym razem, gdy dodawałem ją przez okno projektu EDMX, otrzymywałem błąd „źródła danych”. Rozwiązaniem było dodanie procedury składowanej jako pustej (zachowałem nazwę i deklarację przechowywanej procedury, ale usunąłem zawartość przechowywanej procedury i zastąpiłem ją wartością „wybierz 1” i ponowiłem próbę dodania jej do EDMX). Zadziałało! Prawdopodobnie EF nie lubił czegoś w moim przechowywanym proc. Po dodaniu proc do EF byłem w stanie zaktualizować zawartość proc w mojej bazie danych do tego, co chciałem, i to działa, błąd „źródła danych” został rozwiązany.

niesamowitość

Spyder
źródło
0

Otrzymałem ten sam błąd, a następnie zaktualizowałem parametry połączenia, jak poniżej,

<add name="EmployeeContext" connectionString="data source=*****;initial catalog=EmployeeDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />

Spróbuj tego, a rozwiąże Twój problem.

Hasiya
źródło