Mam nadzieję, że ktoś jest w stanie mi pomóc, ponieważ wydaje mi się, że utknąłem całkowicie.Entity Framework Code Najpierw bez app.config
W przypadku nadchodzących projektów w naszej firmie chcielibyśmy użyć Entity Framework 5 z pierwszym podejściem do kodu. Grałem przez jakiś czas i za każdym razem, gdy próbuję używać EF z naszymi istniejącymi bibliotekami, zawodzę, ponieważ wydaje się, że EF silnie polega na istniejącym app.config.
W naszej firmie mamy wbudowaną bibliotekę baz danych, która pozwala nam łączyć się z różnymi źródłami danych i technologiami baz danych, korzystając z zalet MEF (zarządzanej rozszerzalnej struktury) dla dostawców baz danych. Muszę tylko przekazać pewne ustawienia bazy danych, takie jak host (lub plik), katalog, poświadczenia użytkownika i nazwa dostawcy bazy danych, biblioteka szuka odpowiedniej wtyczki i zwraca mi niestandardowy ciąg połączenia lub IDbConnection. Chcielibyśmy użyć tej biblioteki razem z EF, ponieważ pozwala nam być elastycznym w kwestii tego, która baza danych, której używamy, również zmienia bazę danych w czasie wykonywania.
So. Widziałem, że typowy obiekt DbContext nie przyjmuje parametrów w konstruktorze. Automatycznie wyszukuje odpowiedni ciąg połączenia w pliku app.config. Nie lubimy takich rzeczy, więc zmieniłem domyślny konstruktor, aby pobrać obiekt DbConnection, który zostanie przekazany do klasy bazowej DbContext. Brak zgody.
Problemy pojawiają się, gdy zmienia się pierwszy model kodu. EF automatycznie zauważa to i szuka klas migracji/konfiguracji. Ale: Typowa klasa migracji wymaga domyślnego konstruktora bez parametrów dla kontekstu! Jaka szkoda!
Dlatego tworzymy własną klasę migracji za pomocą interfejsu IDbContextFactory. Ale znowu wydaje się, że również ten IDbContextFactory potrzebuje konstruktora bez parametrów, w przeciwnym razie nie będę mógł dodać migracji ani zaktualizować bazy danych.
Ponadto stworzyłem własny konfigurator migracji danych, w którym przekazuję kontekst, a także docelową bazę danych. Problem jest tutaj: Nie znajduje żadnych klas migracji, bez względu na to, co próbuję.
Całkowicie utknąłem, ponieważ wydaje się, że jedynym sposobem użycia EF jest zapisywanie ciągów połączenia w pliku app.config. I to jest głupie, ponieważ musimy zmienić połączenia z bazami danych w czasie wykonywania, a app.config jest tylko do odczytu dla domyślnych użytkowników!
Jak rozwiązać ten problem?
Jeśli nie przekazujesz połączenia, to musisz go odczytać z pliku app.config? W przeciwnym razie, jak by to kiedykolwiek znalazł? –