Pracuję nad projektem, który może skończyć z wieloma wersjami/wariantami UI, ale do tej pory mam dwa podprojekty w moim rozwiązaniu Web - zawierające interfejs WWW z ASP.NET MVC . Projekt serwisowy to miejsce, w którym mam zdefiniowany kontekst i modele bazy danych.Miejsce do umieszczenia Database.SetInitializer
Moim celem jest posiadanie minimum lub prawdopodobnie brak odniesień do kodu specjalnego EF w moim projekcie internetowym. Chcę, aby był niezależny, więc kiedy przełączam biblioteki DLL z obsługą usługi (z powiedzmy SQL na XML lub MySQL) nie powinienem dokonywać wielu modyfikacji w moim projekcie MVC.
Jak to wygląda:
Moje pytania są następujące: - do tej pory nie znalazłem przykład stosując Database.SetInitializer w innym miejscu niż Global.asax. Chciałbym umieścić ponowne utworzenie bazy danych, gdyby model został zmieniony w mojej fabrycznej klasie DatabaseContextProvider lub w klasie usług, która wyciąga dane z kontekstu i dostarcza je do interfejsu użytkownika z DTO. Czy są jakieś minusy tej lokalizacji? - Chciałbym, aby kontekst connectionString był konfigurowalny z plikiem Properties/Settings.settings - czy jest to uzasadnione?
Potencjalnym problemem jest to, że można go wywołać za każdym razem, gdy skonstruowana jest klasa myDbContext, co równie dobrze może być przydatne przy każdym użyciu bazy danych. Wyobrażam sobie, że jest to dość kosztowna operacja i nie chcesz, żeby tak się stało. Korzystanie z Global.asax Application_Start lub Static Constructor w klasie DataContext gwarantuje, że kod jest wywoływany tylko raz, gdy aplikacja jest uruchomiona. – Holf
Zgadzam się z Holfem, kod powinien znajdować się na application_start –