Zmieniłem mój DAL z używania LINQ na Entity Framework. Ponieważ moja aplikacja łączy się z różnymi bazami danych w zależności od bieżącego użytkownika, muszę dynamicznie utworzyć DataContext w czasie wykonywania i przekazać odpowiedni ciąg połączenia. Jednak gdy próbowałem programowo utworzyć połączenie Entity Framework przy użyciu mojego starego ciągu połączenia, połączenie nie powiodło się. Zarzucił, że nie rozpoznał klucza w łańcuchu połączenia, dokładniej "serwer".Dlaczego połączenie Entity Framework wymaga właściwości metadanych?
I okazało się, że muszę to zrobić w celu uzyskania połączenia Entity Framework do pracy:
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.Provider = "System.Data.SqlClient";
entityBuilder.ProviderConnectionString = clientConnectionString;
entityBuilder.Metadata = "res://*/xxxxxxxxxx.csdl...";
Entities entities = new Entities(entityBuilder.ToString());
Dlaczego tak jest?
Do czego służy właściwość metadane?
Czy to będzie problem, który zawsze będzie taki sam dla wielu różnych połączeń?
Co powinno być?
Czy jest jakiś sposób obejścia tego?
Z góry dziękuję!
Aktualizacja 1: Dzięki za aktualizację Randolpho, ale ...
Cały powód mam ten problem, że nie mogę zapisać ciągów połączenia w pliku konfiguracyjnym. Ciąg połączenia jest określany dynamicznie w czasie wykonywania, z którym użytkownik łączy się.
Oto mój dokładny scenariusz:
Jeśli użytkownik A łączy, aplikacja pobiera dane z bazy danych A. Jeśli użytkownik B łączy, aplikacja pobiera dane z bazy danych B.
Ciągi połączeń są przechowywane w głównym baza danych, a liczba jest potencjalnie nieograniczona. Za każdym razem, gdy dodaję użytkownika, nie chcę iść do web.config, nie wspominając już o tym, że w końcu dostanie OGROMNĄ!
Ponieważ odwzorowania są takie same dla każdego połączenia i nie ulegnie zmianie, nie powinno mieć znaczenia, że używam tych samych metadanych dla nich wszystkich, prawda? –
tak, to jest poprawne – user230910