2013-02-08 26 views
18

Tôi tiếp tục gặp phải lỗi này thường do một số lỗi mà tôi đã thực hiện khi tạo ứng dụng trong Lightswitch. Nó thường được liên kết với các mối quan hệ. Tôi vô tình di chuyển và thực hiện một số điều trước khi tôi xuất bản ứng dụng và xem lỗi. Bởi thời gian này rất khó để calulate những gì tôi đã làm sai. Có cách nào tôi theo dõi lỗi này trở lại để xem những gì tôi cần phải thay đổi trong các bảng?Bản cập nhật lược đồ đang kết thúc vì mất dữ liệu có thể xảy ra

Provider SqlClient liệu Net: Msg 50000, Level 16, State 127, dòng 6 Hàng đã được phát hiện. Bản cập nhật lược đồ đang kết thúc vì mất dữ liệu có thể xảy ra.

Cảm ơn bạn.

Trả lời

11

Lỗi này xảy ra khi thay đổi bạn đã thực hiện cho thuộc tính của một thực thể (trong trình thiết kế bảng) sẽ khiến bảng của thực thể trong cơ sở dữ liệu đã xuất bản bị xóa & được tái tạo và bảng có dữ liệu trong đó. Đây chỉ là cách mà SQL Server hoạt động, nó không nằm dưới sự kiểm soát của LightSwitch. Tuy nhiên, LightSwitch sai về mặt thận trọng, & không cho phép một hoạt động có thể gây mất khả năng mất dữ liệu.

Các loại điều mà có thể kích hoạt này là:

  • đổi tên một tài sản
  • thay đổi nó từ cần-không cần vv
  • thay đổi một tài sản dữ liệu loại
  • & thậm chí (nếu tôi nhớ cor tiếp xảy ra) thay đổi vị trí của một tài sản trong danh sách tài sản

Bạn tuy nhiên thể, thêm một thuộc tính vào cuối danh sách tài sản, mà không kích hoạt bảng được giảm & tái tạo. Thực sự không phải là một ý tưởng hay khi thực hiện quá nhiều thay đổi trước khi cố gắng xuất bản ứng dụng, vì lý do chính xác mà bạn đề xuất - kết thúc là không biết bạn đã làm gì. Bạn đặc biệt muốn xuất bản sau khi thực hiện bất kỳ thay đổi nào đối với các thuộc tính của một thực thể. Ngay cả khi bạn chỉ xuất bản cho một cá thể SQL Server cục bộ (bao gồm cả SQL Express) trên máy phát triển của bạn, để "thử nghiệm" các thay đổi của bạn trước khi bạn xuất bản lên máy chủ sản xuất.

Cách mà tôi đã nhận được (khi tôi vẫn sử dụng để sử dụng dữ liệu nội tại của LS, ApplicationData - Bây giờ tôi sử dụng nguồn dữ liệu đính kèm) là tự thực hiện thay đổi cho cột trong cơ sở dữ liệu như SSMS (SQL Server Management Studio). Sau đó, bạn có thể quyết định cho phép mất dữ liệu (tiềm năng). Hãy cẩn thận mặc dù những gì bạn thay đổi, & đảm bảo chỉ có cùng một là thay đổi bạn đã thực hiện cho thuộc tính trong LightSwitch. Tất nhiên sao lưu cơ sở dữ liệu trước khi thực hiện bất kỳ thay đổi nào đối với nó. Nếu bạn khiến cơ sở dữ liệu không đồng bộ với LightSwitch, bạn sẽ gặp phải các vấn đề lớn.

+0

Xin chào Yann, Bạn có nói rằng không có cách nào để theo dõi nguồn của lỗi đối với thuộc tính đang gây ra lỗi đó? – Mark

+0

Không phải là tôi biết, không. Đó là lý do tại sao tôi nói luôn xuất bản ngay sau khi thực hiện bất kỳ thay đổi nào đối với thuộc tính. Nếu dữ liệu của bạn không quan trọng, bạn có thể xóa cơ sở dữ liệu và nó sẽ được tạo lại khi bạn xuất bản lần sau. Nếu dữ liệu của bạn quan trọng, bạn có thể phải tự kiểm tra các bảng LightSwitch của bạn dựa vào các bảng trong cơ sở dữ liệu. –

+0

Xin chào Yann, Dữ liệu quan trọng. Tôi không có khả năng là tôi sẽ có thể tìm thấy vấn đề bằng cách kiểm tra các bảng Lightswitch đối với cơ sở dữ liệu. Tuy nhiên, tôi có thể khôi phục cơ sở dữ liệu từ bản sao lưu trước các thay đổi gây xúc phạm. Tôi có thể làm điều đó và xóa các bảng mới trong Lightswitch mà SQL thấy có tính xúc phạm không? – Mark

4

Một mục là một đầu mối cho vấn đề nằm trong thông báo lỗi.Ví dụ: trong thông báo lỗi ở trên [Msg 50000, Cấp 16, Tiểu bang 127, Dòng 6], Dòng 6 đề cập đến số dòng trong tệp .publish.sql là một phần của bản dựng. Có thể tìm thấy tệp này trong thư mục con/bin/Debug của dự án của bạn. Vì đây là tệp văn bản, bạn có thể mở tệp bằng bất kỳ trình soạn thảo văn bản nào hoặc với VS2012 để xem tệp và tìm số dòng có lỗi.

Trong vấn đề cụ thể của tôi, tôi đã bỏ một cột mà tôi không còn cần nữa. Trong tệp .publish.sql đã được tạo, tôi có thể định vị dòng IF EXISTS đã kiểm tra các hàng trong bảng mà tôi đã thay đổi. Vì tôi biết rằng sự thay đổi này không phá hủy dữ liệu mà tôi quan tâm, tôi chỉ nhận xét ra dòng IF EXISTS trong VS2012, sau đó thực hiện lại kịch bản. Sự thay đổi diễn ra theo kế hoạch.

Xin lưu ý: Đề xuất này sẽ ghi đè bảo vệ an toàn để bảo vệ dữ liệu của bạn. Chỉ thực hiện thay đổi này nếu bạn cảm thấy thoải mái khi thực hiện nó. *

+0

ý tưởng hay! cảm ơn –

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