5

Mam obecnie projekt, który wykorzystuje Entity Framework Code-First migrations i Web Publish, gdzie connectionStrings są przechowywane w pliku web.config.WebPublish Code-First Migracje z zewnętrznym plikiem connectionStrings.config

Nadszedł czas, aby przenieść connectionStrings poza web.config, i jako taki umieściliśmy je w pliku connectionString.config, i powolne przekształcanie ich na webpublish.

connectionStrings.config odpowiedniej sekcji

<connectionStrings> 
    <!-- Testing Databases --> 
    <add 
     connectionString="server=testserver;database=testdatabasename;user id=someid;password=*******" 
     name="dbname" 
     providerName="System.Data.SqlClient" 
    /> 
</connectionStrings> 

web.config

<connectionStrings configSource="config\connectionStrings.config"> 
    </connectionStrings> 

Teraz kiedy załadować okno dialogowe Publish Web (Build -> Publish projektu), na karcie Ustawienia I otrzymasz komunikat o błędzie:

No Databases found in the project 

Wskazuje to, że okno dialogowe nie jest inteligentne. wystarczy zobaczyć configSource i załadować dane z tego miejsca. Mogę potwierdzić, że connectionStrings są poprawnie załadowane w moim środowisku programisty, i mogę również potwierdzić, że slowcheetah poprawnie przekształca konfigurację do swojego środowiska produkcyjnego.

Czy istnieje sposób, aby program Visual Studio Publish wyświetlał konfigurację konfiguracji i zezwalał na pierwsze migrację kodu?

+0

[This] (http://stackoverflow.com/questions/16733042/publishing-external-configuration-files-in-asp-net-mvc-project-using-visual-stud) może być pomocne dla ciebie. –

+0

@Siva Niestety to nie problem, inne pliki konfiguracyjne zostały wdrożone. To jest problem z Visual Studio strony rzeczy :( –

+0

Mam dokładnie ten sam problem, w VS 2015 CTP, choć jestem prawie pewien, że mogę replikować go na VS2013 również .Jeśli używam zewnętrznego pliku ConnString.config, ciąg połączenia nie jest pobierany przez okno publikowania w sieci Web i nie mogę używać migracji z pierwszeństwem kodu.Czy ktoś znalazł obejście tego problemu? –

Odpowiedz

3

Miałem ten sam problem także przy użyciu Entity Framework 6 code najpierw w oddzielnym projekcie z opublikowanego projektu w .NET 4.5 przy użyciu Visual Studio 2013 Update 4 i przy użyciu podobnej metody udostępniania za pomocą atrybutu configSource connectionStrings.

Wymieniam te szczegóły, ponieważ powoduje to trochę idealnej burzy. Próbując się z tego wydostać napotkałem kilka różnych błędów i musiałem to zhakować na kilka różnych sposobów, zgodnie z EF blog they know it's a mess and are re-factoring their approach. To jest najlepsze, co mogę wymyślić (tutaj są smoki):

Kreator publikowania prawdopodobnie nie rozumie configSource, więc wyjąłem go z conectionStrings w web.config pozostawiając pusty element (można go również usunąć całkowicie, ale czułem, że istniejący, ale pusty element najlepiej z komentarzem był bardziej odpowiedni). Aby działało lokalnie, dodałem fabrykę połączeń, aby działała w trybie debugowania (lokalnie) i sprawiła, że ​​kreator publikacji znalazł migrację do bazy danych. Użyłem fabryki, ponieważ connectionString zawsze zastępuje fabrykę i muszę ją nadużyć, aby projekt działał przed jakimikolwiek przekształceniami. Upewnij się również, że ciąg przekazywany do konstruktora dbcontext zwany również "connectionStringOrDatabaseName" jest ciągiem połączenia ORAZ nazwą bazy danych (powoduje, że produkowany fabrycznie db odpowiada ciągowi połączenia db).

Teraz znajduje bazę danych i działa lokalnie, ale tak naprawdę nie używa twojego sharedConfig (w związku z tym nie zawsze będzie działał na zasadzie publikowania). Aby rozwiązać ten problem, użyłem transformacji web.config do xsd: Zamień/wstaw pusty/brakujący element connectionStrings w jeden przy użyciu configSource. Jeśli spróbujesz opublikować teraz, natkniesz się na problem polegający na tym, że invalid connectionStrings element is produced.

Pomimo tego, że znajdowałem się tak blisko, nie mogłem znaleźć/znaleźć rozwiązania tego problemu bezpośrednio, więc musiałem zatrudnić jeszcze jedną pracę: I created a custom transformation aka xsd: Import, który po podaniu atrybutu configSource zastępuje element nadrzędny jeden w drugim pliku, zostawię implementację jako ćwiczenie dla czytelnika.

Powiązane problemy