Tôi có một ứng dụng MVC4 mà gần đây tôi đã nâng cấp lên Entity Framework 5 và tôi đang cố gắng chuyển cơ sở dữ liệu sang sử dụng di chuyển từ kiểu phát triển thả và tạo mỗi lần chạy.Entity Framework 5 Di chuyển: Thiết lập di chuyển ban đầu và hạt giống đơn của cơ sở dữ liệu
Đây là những gì tôi đã thực hiện trong chức năng khởi động ứng dụng của mình.
protected void Application_Start()
{
Database.SetInitializer(
new MigrateDatabaseToLatestVersion< MyContext, Configuration >());
...
}
Tôi chạy lệnh Enable-Migrations
về dự án kho của tôi và tôi nghĩ rằng điều này sẽ tạo ra một tập tin di chuyển ban đầu tuy nhiên các tập tin duy nhất nó tạo ra là Configuration
Khi tôi xóa cơ sở dữ liệu nó tạo ra nó như mong đợi qua mã đầu tiên và hạt giống cơ sở dữ liệu từ tệp cấu hình. Trong tệp cấu hình, tôi đã thay đổi tất cả các chức năng Add()
thành AddOrUpdate()
Tuy nhiên, nó chạy chức năng hạt giống trong tệp Configuration
mỗi khi trang web bắt đầu và sao chép tất cả dữ liệu hạt giống lặp đi lặp lại.
tôi tưởng tượng rằng nó sẽ tạo ra một tập tin initial migration
như blog tôi đọc gợi ý rằng nó sẽ và tôi có thể đưa dữ liệu hạt giống trong đó nhưng nó đã không
bất cứ ai có thể giải thích làm thế nào tôi nên được thiết lập DB trong mã để nó chỉ có hạt giống một lần?
LINK: The migrations blog post I followed
Trong khi điều này là khá thú vị để sử dụng migrate.exe EF Tôi đã kể từ khi chuyển sang sử dụng roundhouse để chạy di cư. Tôi vẫn sử dụng EF để dàn dựng di chuyển của tôi dựa trên các mô hình nhưng tôi đã viết một ứng dụng giao diện điều khiển nhỏ để ghi các di chuyển ra các tệp SQL. Sau đó tôi sử dụng nhà tròn để thực hiện việc di trú thông qua các kịch bản xây dựng cào của tôi. Có quá trình liên quan nhiều hơn một chút nhưng ổn định hơn nhiều so với sử dụng EF để thực hiện di chuyển khi ứng dụng khởi động.
Tôi đoán nó chạy mỗi lần bởi vì đó là cách duy nhất họ có thể làm điều đó mà không thực sự phải thực hiện gieo vào sự di trú thực tế. Nếu mã hạt giống của bạn nằm bên trong Up() của quá trình di chuyển, nó sẽ chỉ chạy một lần và điều này trực quan hơn với tôi, vì thường bạn thực hiện một số thay đổi db và muốn thêm một số dữ liệu vào phần mới này của lược đồ – FRoZeN
Nếu bạn không có bất kỳ di chuyển nào, phương thức hạt giống của bạn sẽ không bao giờ được chạy bằng phương thức này. Tôi cũng ngày nay thích làm giống trong di cư - theo cách đó tôi biết nó sẽ chỉ chạy một lần. – oldwizard
Xin chào pcguru. Trong thực tế, bạn luôn có một sự di trú vì cơ sở dữ liệu ban đầu được coi là một di chuyển, nghĩa là nó di chuyển từ cơ sở dữ liệu không có cơ sở dữ liệu. Tuy nhiên tôi có thể thấy lợi ích của việc có hạt giống trong quá trình di cư. –