6

Tôi có hai thư mục cho di chuyển của tôi (AuthContext và UserProfileContext), mỗi di chuyển của riêng họ và một số sql tùy chỉnh để chạy sau đó để di chuyển dữ liệu và whatnot.Mã EF đầu tiên di chuyển không chạy sau khi triển khai Azure

Tính năng này hoạt động tốt khi sử dụng bảng điều khiển trình quản lý gói. Tôi

  1. Khôi phục từ khâu sản xuất
  2. Run Update-Cơ sở dữ liệu -ConfigurationTypeName Migrations.Auth.Configuration
  3. Run Update-Cơ sở dữ liệu -ConfigurationTypeName Migrations.UserProfile.Configuration

Sau đó, mọi thứ đều rất hạnh phúc trong cơ sở dữ liệu mới, di chuyển dữ liệu được thực hiện xáo trộn nơi cần.

tôi đã cố gắng để kiểm tra sự di cư trên xuất bản phẩm theo:

  1. Khôi phục sản xuất trên cơ sở dữ liệu dev
  2. Độc chuỗi kết nối (tất cả bối cảnh sử dụng giống nhau) chỉ để dev cơ sở dữ liệu
  3. Publish để xanh trang web
  4. Đã chọn hộp áp dụng Mã di chuyển đầu tiên
  5. Chọn chuỗi kết nối đơn lẻ

Ok nó được xuất bản tốt; tuy nhiên, khi tôi đi xem cơ sở dữ liệu, không có gì xảy ra cả! Nó không tạo ra các bảng, cột hoặc dữ liệu cần thiết.

TLDR; Mã di cư đầu tiên không chạy sau khi xuất bản để Azure

Cập nhật 1 Tôi đã thử bất kỳ sự kết hợp của các bên dưới: chuỗi kết nối chỉ có một đơn vì vậy tôi đoán đó không phải là vấn đề, và thực hiện cuộc di cư là đã kiểm tra. enter image description here

Khi xuất bản api chạy nhưng không có thay đổi cơ sở dữ liệu nào được thực hiện. Tôi nghĩ có lẽ tôi cần phải nhấn nó trước nhưng tôi chỉ nhận được các lỗi ngẫu nhiên khi tôi cố gắng sử dụng api (mà bây giờ tất nhiên dựa vào thiết lập cơ sở dữ liệu mới), và cơ sở dữ liệu vẫn không thay đổi.

Tôi đã nhìn thấy một vài tham chiếu ngoài đó về việc cần phải thêm thứ gì đó vào lớp Khởi động của tôi nhưng tôi không chắc chắn cách tiếp tục.

Cập nhật 2 Tôi đã giải quyết một vấn đề bằng cách thêm "Thông tin bảo mật liên tục = True" vào chuỗi kết nối của tôi. Bây giờ nó thực sự kết nối với cơ sở dữ liệu và gọi API của tôi; tuy nhiên, không có di chuyển nào đang chạy. Tôi đính kèm trình sửa lỗi vào môi trường Azure dev và bước qua ... trên cơ sở dữ liệu đầu tiên của tôi gọi nó là bước vào lớp Cấu hình cho Di chuyển được đề cập, sau đó là barfs và tôi không thể theo dõi lỗi.

public Configuration() 
{ 
    AutomaticMigrationsEnabled = false; 
    MigrationsDirectory = @"Migrations\Auth"; 
    ContextKey = "AuthContext"; 
} 

Cập nhật 3

Okay, đào xuống và lần đầu tiên nó chạm vào cơ sở dữ liệu, chúng tôi đang erroring. Có điều này có ý nghĩa vì mô hình đã thay đổi, nhưng tôi đã di chuyển tại chỗ, được bật và được kiểm tra! Một lần nữa, nó hoạt động tốt khi chạy "Update-Cơ sở dữ liệu" từ quản lý gói giao diện điều khiển, nhưng không phải khi sử dụng Execute Mã Đầu tiên Migrations trong xuất bản để Azure

Mô hình sao bối cảnh 'AuthContext' đã thay đổi kể từ khi cơ sở dữ liệu là tạo. Cân nhắc sử dụng Mã di chuyển đầu tiên để cập nhật cơ sở dữ liệu (http://go.microsoft.com/fwlink/?LinkId=238269).

Cập nhật 4 rồi tôi tìm thấy những vấn đề gốc rễ ở đây. VS là thiết lập các att. web.config bổ sung cho databaseInitializer trên chỉ một trong những bối cảnh cơ sở dữ liệu của tôi, một trong những không được đề cập là trong thực tế nhấn đầu tiên từ ứng dụng của tôi.

Vì vậy, bây giờ tôi phải tìm ra cách làm cho nó bao gồm nhiều bối cảnh, hoặc kết hợp tất cả nội dung của tôi vào một ngữ cảnh duy nhất.

+0

Bạn đã lấy ook bài đăng này http://blogs.msdn.com/b/webdev/archive/2014/04/09/ef-code-first-migrations-deployment-to-an-azure-cloud-service.aspx, có vẻ như bạn có thể cần thêm mã vào mã Application_Start của Global.asax –

+0

@JWCảm ơn, tôi đã thấy rằng, nó đặc biệt cho Azure Cloud Service và tôi đang sử dụng Azure Website, mà được cho là bạn không cần phải làm bất cứ điều gì thêm ... –

+0

Tôi nghĩ rằng bạn phải đảm bảo rằng mã di chuyển db chạy cho dù đó là loại dự án nào. –

Trả lời

3

Giải quyết! Để tóm tắt giải pháp cho hậu thế:

Bật mã Lần di chuyển đầu tiên chỉ cho phép một chuỗi kết nối cơ sở trên mỗi hộp kiểm được kiểm tra, bất kể có bao nhiêu ngữ cảnh di chuyển dựa vào chuỗi kết nối cơ sở đó. Vì vậy, trong trường hợp của tôi, tôi đã phá vỡ hai trong câu hỏi thành hai chuỗi kết nối khác nhau.

Sau đó, tôi đã gặp lỗi khác và xác định rằng nếu bạn đang thay đổi chuỗi kết nối cơ sở thành mô hình sao lưu định danh asp bạn cần bao gồm (một lần xuất bản) cơ sở cờ bổ sung ("AuthContext", throwIfV1Schema: false)

10

Câu trả lời cho bài đăng này không phải là rất chi tiết.

Bài viết này giải thích những gì tôi phải làm gì để sửa chữa một vấn đề tương tự như sau: https://blogs.msdn.microsoft.com/webdev/2014/04/08/ef-code-first-migrations-deployment-to-an-azure-cloud-service/

tôi sẽ xấp xỉ mô tả các bước tôi đã phải mất dưới đây:

Bước 1 Thêm bạn các chuỗi kết nối tới dbContexts của bạn, trong tình huống của tôi, chúng đều giống nhau.

enter image description here

Bước 2 Thêm phần này vào web.config của bạn

<appSettings> 
    <add key="MigrateDatabaseToLatestVersion" value="true"/> 
    </appSettings> 

Bước 3 Và thêm video này vào dưới cùng của global.asax.cs/Startup.cs của bạn (Khởi động OWIN)

var configuration = new Migrations.Configuration(); 
    var migrator = new DbMigrator(configuration); 
    migrator.Update(); 
+0

Không thể xem phần DATA trong phần hỗ trợ xuất bản của tôi nhưng vẫn cảm ơn! – Daniel

+1

Tuyệt vời. Tôi đã phải thêm mã bạn đã đề cập để có được phương pháp Seed của tôi được gọi khi khởi động. Cảm ơn rất nhiều, đã dành hàng giờ để tìm ra điều này. – rolls

+0

Cảm ơn bạn vì điều này! Giải pháp của bạn đã làm việc trong dự án mẫu máy chủ Xamarin Forms mẫu mà Azure tạo ra. Thay vì thêm vào global.asax.cs (vì tôi không có), tôi đã thêm đoạn mã vào phương thức ConfigureMobileApp() trong Startup.MobileApp.cs. –

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