Korzystam z Entity Framework i niedawno zdałem sobie sprawę z zalet posiadania modelu EF w innym projekcie w ramach tego samego rozwiązania, dzięki czemu mogę z niego tworzyć wiele interfejsów.Przenoszenie modelu Entity Framework do biblioteki klas z projektu WWW
Przenieśliłem to do nowego projektu biblioteki klas i zaktualizowałem wszystkie odniesienia do elementów w projekcie internetowym, aby użyć nowej biblioteki dll wygenerowanej przez projekt. Wszystko poszło gładko, z wyjątkiem jednego małego szkopułu. Kiedy przeniosłem EF do nowego projektu, w jakiś sposób wciąż czytałem jego ciąg połączenia z web.config w projekcie sieciowym (nie pytaj mnie, ponieważ nie mam pojęcia).
Użyłem "Aktualizuj model z bazy danych" w projektancie EF i nie znaleziono ciągu połączenia (jak się spodziewałem po przeniesieniu go do nowego projektu), więc użyłem kreatora do wygenerowania nowego ciągu połączenia, który wszystko było w porządku. Nowy ciąg połączenia znajduje się teraz w App.config w projekcie biblioteki klas. Ciąg połączenia w oknie właściwości jest teraz poprawny, a projektant czyta go z App.Config. Poszedłem dalej i usunąłem ciąg połączenia z Web.Config w projekcie internetowym.
Teraz po uruchomieniu aplikacji pojawia się następujący błąd:
The specified named connection is either not found in the configuration, not intended to be used with the EntityClient provider, or not valid.
Gdybym wklej ciąg połączenia z powrotem do web.config to wszystko działa dobrze. Nie chcę tworzyć nowego modelu EF od zera, ponieważ jest to dość skomplikowany model i przeprowadziłem wiele restrukturyzacji po wycofaniu z DB. Przelałem wygenerowany plik CS, a także plik XML w pliku edmx i nie mogę znaleźć niczego przydatnego. Każda pomoc jest doceniana. Oczywiście na razie, dopóki nie zrozumiem tego, po prostu zostawiam ciąg połączenia w web.config, ponieważ z jakiegoś powodu wydaje się, że działa.
Czekaj, więc oznacza to, że plik app.config w bibliotece klas jest bezcelowy? Czy biblioteka skompilowana nie powinna mieć dostępu do własnych zasobów? W jaki sposób jest on świadomy web.config w innym projekcie? – Chev
@Chevex: W czasie wykonywania, tak, to bezcelowe. Plik konfiguracyjny nie jest zasobem, jest to po prostu plik konfiguracyjny, który jest częścią projektu. Budowanie projektu nic z tym nie robi. Jest świadomy Web.config, ponieważ używa menedżera konfiguracji .NET, a aplikacja uruchamiająca (w twoim przypadku aplikacja internetowa) kieruje go tam. –