2011-12-17 16 views
34

domyślnie próby dowodzenia dodatek migracja do stworzenia pliku migracji .cs wCzy można zmienić lokalizację folderu "Migracje" EF Migrations?

  • Projektu Korzeń
    • Migracje

Chciałbym przechowywać moje wędrówki wzdłuż z resztą mojego kodu związanego z EF w folderze \ Data mojego projektu:

  • Projekt korzeniowe
    • danych
      • Migracje

Dzięki tej strukturze, kiedy wykonanie

PM> add-migration Migration1 

w konsoli Nuget pojawia się następujący błąd:

 
    System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\MyProjectRoot\Migrations\201112171635110_Migration1.cs'. 
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath) 
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options) 
    at System.IO.StreamWriter.CreateFile(String path, Boolean append) 
    at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize) 
    at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding) 
    at System.IO.File.InternalWriteAllText(String path, String contents, Encoding encoding) 
    at System.IO.File.WriteAllText(String path, String contents) 

Czy jest możliwe określenie lokalizacji na dysku, która ma zostać utworzona podczas wykonywania polecenia add-migration?

+0

Jako rozwiązanie proszę zaznaczyć rozwiązanie Rogera. To zadziałało dla mnie. Dzięki. – jordanbtucker

Odpowiedz

55

w klasie konstruktora konfiguracyjnym dodać tę linię:

this.MigrationsDirectory = "DirOne\\DirTwo"; 

Przestrzeń nazw będzie nadal być ustawiony jako nazw samej klasie konfiguracji. Aby zmienić ten dodatek tę linię (również w konstruktorze konfiguracji):

this.MigrationsNamespace = "MyApp.DirOne.DirTwo"; 
+2

+1 zaoszczędziło mi mnóstwo kłopotów. Przeszedłem przez wszystkie moje filmy Pluralsight, próbując znaleźć przykład, który nie dziedziczy tej domyślnej konfiguracji dla lokalizacji folderu migracji. Jesteś ratownikiem. – JustinMichaels

+0

Czy jest jakiś sposób określenia tego w pliku "web.config"? –

+0

gdzie jest ta klasa konfiguracji? –

10

Określanie folder migracje jest również możliwe podczas invoke polecenia enable-migrations (który tworzy klasę Configuration), używając parametru -MigrationsDirectory:

enable-migrations -EnableAutomaticMigration:$false -MigrationsDirectory Migrations\CustomerDatabases -ContextTypeName FullyQualifiedContextName 

Przykład utworzy klasę Configuration, która ustawia MigrationsDirectory do określonego folderu "Migracje \ CustomerDatabases", który jest względny do folderu głównego projektu.

public Configuration() 
{ 
    AutomaticMigrationsEnabled = false; 
    MigrationsDirectory = @"Migrations\CustomerDatabases"; 
} 


Zobacz także this artykuł, który wyjaśnia o projekcie z wielu kontekstach i folderów migracyjnych. Przy okazji, jeśli korzystasz z wielu folderów migracji i wielu kontekstów, rozważ także ustawienie nazwy domyślnego schematu w klasie pochodnej OnModelCreating twojej klasy DbContext (gdzie znajduje się konfiguracja Fluent-API).będzie działać w EF6:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.HasDefaultSchema("CustomerDatabases"); 
    } 

Rzecz przedrostek tabel baz danych z nazwą schematu. Umożliwi ci to użycie więcej niż jednego kontekstu z jedną bazą danych w scenariuszu, w którym masz kilka grup tabel, które są niezależne od innych. (Spowoduje to również utworzenie oddzielnych wersji tabel MigrationHistory, w powyższym przykładzie będzie to CustomerDatabases.__MigrationHistory).

Powiązane problemy