2015-10-06 16 views
5

Tôi đang sử dụng EF6.0 và triển khai db của mình với SQLServerDatabaseProject. Tôi muốn sử dụng các công cụ di chuyển EF để di chuyển cơ sở dữ liệu. nhưng vì tôi có cơ sở dữ liệu của mình trên DbProject, tôi muốn tất cả các tệp di chuyển của mình là SQLFiles (không phải là C#) Vì vậy, tôi muốn biết liệu EF có hỗ trợ tính năng này hay không, có thể viết một lớp Migration mới giữ EF tính năng nhưng hoạt động theo cách này?là nó có thể sử dụng các tập tin sql như di chuyển cơ sở dữ liệu EF?

hãy cũng xem xét rằng tôi không muốn EF để tạo ra sự di cư của tôi nhưng tôi muốn để có thể sử dụng lệnh di cư khác như cập nhật cơ sở dữ liệu và ...

== CHI TIẾT THÊM VỀ CÁC QUESTION ==

Tôi không muốn có các lớp C# tải các tệp sql của mình. Các tệp sql phải được lưu để di chuyển lên và xuống trực tiếp và được xử lý chính xác như thể chúng là các lớp DbMigration. Một ví dụ đơn giản của Migrations dir sẽ là một cái gì đó như thế này:

Migrations 
    -> up 
     -> 201510060807125_alter-course-change-family.sql 
     -> 201510060813136_alter-course-add-mark-column.sql 
    -> down 
     -> 201510060807125_alter-course-change-family.sql 
     -> 201510060813136_alter-course-add-mark-column.sql 

Trả lời

5

Đơn giản chỉ cần trong việc sử dụng lớp chuyển đổi phương pháp SqlFile mở rộng:

public partial class MyFancyMigration : DbMigration 
{ 
    public override void Up() 
    { 
     SqlFile("myUpSQLFile.sql"); 
    } 

    public override void Down() 
    { 
     SqlFile("myDownSQLFile.sql"); 
    } 
} 
+0

Thanx cho câu trả lời, Nhưng tôi muốn biết nếu có thể sử dụng các tệp SQL để di chuyển thay vì các lớp C#. –

-1

Mặc dù bạn có thể sử dụng SqlFile phương pháp, tôi đề nghị bạn viết này trên phương thức Seed của tệp Configuration.cs trong thư mục di chuyển của bạn.

internal sealed class Configuration : DbMigrationConfiguration<YourDbContext> 
{ 
    protected override void Seed(YourDbContext context) 
    { 
     base.Seed(context); 
     context.Database.ExecuteSqlCommand(FileReadAllText("migration.sql")); 
    } 
} 

Nếu bạn viết di chuyển theo phương pháp Up. Nó sẽ được thực hiện cho mỗi lần di chuyển khi bạn cập nhật cơ sở dữ liệu, mà tôi nghĩ bạn không mong đợi.

Điều bạn muốn là tập lệnh của bạn chạy trên mỗi số Update-Database. (Không phải mỗi lần di chuyển trong đó)

+0

Thanx cho câu trả lời, Nhưng tôi muốn biết nếu nó có thể sử dụng các tệp SQL để di chuyển thay vì các lớp C# –

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