2011-12-17 49 views
34

Theo mặc định, lệnh add-di nỗ lực để tạo ra tập tin sự di cư cs trongCó thể thay đổi vị trí của thư mục di chuyển "Di cư" EF không?

  • Dự án gốc
    • Migrations

Tôi muốn để lưu trữ di cư của tôi cùng với phần còn lại của mã liên quan đến EF của tôi trong thư mục \ Data của dự án của tôi:

  • Dự án gốc
    • liệu
      • Migrations

Với cấu trúc này, khi tôi thực hiện

PM> add-migration Migration1 

trong NuGet console tôi nhận được lỗi sau:

 
    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) 

Có thể chỉ định vị trí trên đĩa mà tệp di chuyển sẽ được tạo khi thực hiện lệnh thêm di chuyển không?

+0

Vui lòng đánh dấu giải pháp của Roger là câu trả lời. Nó làm việc cho tôi. Cảm ơn. – jordanbtucker

Trả lời

55

Trong constructor lớp cấu hình thêm dòng này:

this.MigrationsDirectory = "DirOne\\DirTwo"; 

Không gian tên sẽ tiếp tục được thiết lập như là không gian tên của lớp cấu hình riêng của mình. Để thay đổi tiện ích này dòng này (cũng như trong xây dựng cấu hình):

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

+1 đã cứu tôi rất nhiều rắc rối. Tôi đã đi qua tất cả các video Pluralsight của tôi cố gắng tìm một ví dụ không kế thừa cấu hình mặc định này cho vị trí của thư mục di chuyển. Bạn là một phao cứu sinh. – JustinMichaels

+0

Có cách nào để chỉ định điều này trong tệp 'web.config' không? –

+0

lớp cấu hình này ở đâu? –

10

Xác định thư mục di cư cũng có thể trong suốt invoke của enable-migrations lệnh (mà tạo ra lớp Configuration), sử dụng các tham số -MigrationsDirectory:

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

Ví dụ sẽ tạo một lớp Configuration đặt MigrationsDirectory vào thư mục được chỉ định 'Migrations \ CustomerDatabases' có liên quan đến thư mục gốc của dự án.

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


cũng Xem this Điều này giải thích về một dự án với nhiều ngữ cảnh và thư mục di cư. Bằng cách này, nếu bạn đang sử dụng nhiều thư mục di chuyển và nhiều ngữ cảnh, vui lòng xem xét thiết lập tên cho lược đồ mặc định theo phương pháp OnModelCreating của bạn DbContext lớp dẫn xuất (nơi cấu hình Fluent-API). Điều này sẽ hoạt động trong EF6:

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

Tiền tố bạn sẽ đặt cơ sở dữ liệu với tên lược đồ. Điều này sẽ cho phép bạn sử dụng nhiều hơn một ngữ cảnh với một cơ sở dữ liệu trong một kịch bản mà ở đó bạn có một số nhóm bảng độc lập với một nhóm khác. (Điều này cũng sẽ tạo ra các phiên bản riêng biệt của các bảng MigrationHistory, trong ví dụ ở trên nó sẽ là CustomerDatabases.__MigrationHistory).

Các vấn đề liên quan