41

我不断遇到这个错误,这通常是由我在构建应用程序时犯的一些错误引起的Lightswitch。它通常与关系相关联。在发布应用程序并看到错误之前,我通常会继续前进并做很多事情。到这个时候,很难计算出我做错了什么。有没有办法追溯这个错误以查看我需要在表格中更改什么?

Net SqlClient 数据提供程序:检测到消息 50000、级别 16、状态 127、第 6 行。架构更新正在终止,因为可能会发生数据丢失。

谢谢你。

4

4 回答 4

26

当您对实体的属性(在表设计器中)所做的更改会导致已发布数据库中的实体表被删除并重新创建,并且表中包含数据时,就会发生此错误。这正是 SQL Server 的工作方式,它不受 LightSwitch 的控制。但是,LightSwitch 会谨慎行事,并且不允许进行可能导致任何数据丢失的操作。

可能触发这种情况的事情类型是:

  • 重命名属性
  • 将其从需要更改为不需要
  • 更改属性的数据类型
  • & 甚至(如果我没记错的话)改变属性在属性列表中的位置

但是,您可以将属性添加到属性列表的末尾,而不会触发表被删除和重新创建。

在尝试发布应用程序之前进行太多更改确实不是一个好主意,这正是您建议的原因 - 最终不知道您做了什么。您特别希望在对实体的属性进行任何更改后发布。即使您只是发布到开发机器上的本地 SQL Server 实例(包括 SQL Express),也要在发布到生产服务器之前“测试”您的更改。

我解决这个问题的方法(当我过去仍然习惯使用 LS 的内在数据时,ApplicationData - 我现在使用附加的数据源)是手动更改数据库本身中的列,使用类似 SSMS(SQL服务器管理工​​作室)。然后,您可以决定允许(潜在的)数据丢失。更改的内容要非常小心,并确保它仅与您对 LightSwitch 中的属性所做的更改相同。当然,在对其进行任何更改之前备份数据库。如果您导致数据库与 LightSwitch 不同步,您将遇到重大问题。

于 2013-02-09T15:55:15.373 回答
8

可以作为问题线索的一项在错误消息中。例如,在上面的错误消息 [Msg 50000, Level 16, State 127, Line 6] 中,第 6 行指的是 .publish.sql 文件中的行号,它是构建的一部分。该文件可以在项目的 /bin/Debug 子目录中找到。由于它是一个文本文件,你可以用任何文本编辑器或VS2012打开该文件来查看该文件并找到出现错误的行号。

在我的特定问题中,我删除了一个不再需要的列。在生成的 .publish.sql 文件中,我能够找到检查我正在更改的表中的行的 IF EXISTS 行。由于我知道这个更改不会破坏我关心的数据,所以我只是将 VS2012 中的 IF EXISTS 行注释掉,然后再次执行脚本。改变按计划进行。

请注意:此建议覆盖了为保护您的数据而设置的安全防护措施。仅当您感觉舒适时才进行此更改。 *

于 2013-07-30T15:01:11.110 回答
4

当项目发布失败并出现“架构更新正在终止,因为可能会发生数据丢失”之类的错误时

右键单击项目->发布单击高级,在常规选项卡中->选中“如果可能发生数据丢失,则阻止增量部署”,在放置选项卡中->将对象放置在目标中而不是源中 ,然后单击确定以发布

注意:有时当上述方法不起作用时,请尝试:“取消选中”阻止增量部署和发布

于 2021-01-14T18:32:49.533 回答
0

如果您在 Visual Studio 中比较两个模式。单击数据工具操作菜单中的查看结果。

在此处输入图像描述

在每个错误上方都会对导致您的错误的原因进行评论。这将为您提供错误详细信息。

在此处输入图像描述

于 2022-01-14T12:44:37.590 回答