2011-12-17 107 views
34

默認情況下,附加遷移命令嘗試在是否可以更改EF Migrations「Migrations」文件夾的位置?

  • 項目以創建遷移cs文件根
    • 遷移

我想沿着存儲我的遷移與我的項目的\ Data文件夾中其餘的EF相關的代碼:

  • 項目根
    • 數據
      • 遷移

採用這種結構,當我在的NuGet控制檯收到以下錯誤執行

PM> add-migration Migration1 

 
    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) 

是否可以指定磁盤上執行add-migration命令時應創建遷移文件的位置?

+0

請標記羅傑的解決方案作爲答案。它爲我工作。謝謝。 – jordanbtucker 2012-09-04 17:09:22

回答

55

在配置類的構造函數中加入這一行:

this.MigrationsDirectory = "DirOne\\DirTwo"; 

的命名空間將繼續被設置爲配置類本身的命名空間。爲了改變這種添加本線(也在配置構造函數):

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

+1救了我一噸麻煩。我瀏覽了我的所有Pluralsight視頻,試圖找到一個不會繼承此遷移文件夾位置的默認配置的示例。你是救生員。 – JustinMichaels 2012-11-08 17:28:41

+0

有沒有什麼方法在'web.config'文件中指定這個? – 2015-09-21 09:04:48

+0

這個配置類在哪裏? – 2017-01-12 05:52:19

10

指定遷移文件夾中的enable-migrations命令(其創建Configuration類)的調用期間也是可能的,使用所述-MigrationsDirectory參數:

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

該示例將創建一個Configuration類,該類將MigrationsDirectory設置爲與項目根文件夾相關的指定文件夾'Migrations \ CustomerDatabases'。

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


又見this文章這也解釋了關於與多個上下文和遷移文件夾的項目。順便說一下,如果您正在使用多個遷移文件夾和多個上下文,請考慮在方法DbContext派生類(其中Fluent-API配置爲)的OnModelCreating方法中爲默認架構設置一個名稱。 這將在EF6工作:

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

的前綴將您的架構名稱數據庫表。這將使您能夠在具有多組獨立於另一組的表的情況下使用單個數據庫的多個上下文。 (這也將創建MigrationHistory表的單獨版本,在上面的示例中它將是CustomerDatabases.__MigrationHistory)。