不允许修改 Column 对象的 DefaultConstraintName 属性

Modifying the DefaultConstraintName property of the Column object is not allowed

我正在尝试在一个旧项目上使用官方 Microsoft.SqlServer.SharedManagementObjects NuGet 包,该项目在 SMO 2014 上运行良好。当我尝试添加或编辑列的默认值时,我写了以下内容:

var server = new Server("(local)");

var database = new Database(server, "test_db");
database.Create();

var table = new Table(database, "test_tbl");

var columnKey = new Column(table, "key", DataType.Int);
columnKey.Identity = true;
columnKey.IdentitySeed = 0;
columnKey.IdentityIncrement = 1;
table.Columns.Add(columnKey);

var columnVal = new Column(table, "val", DataType.Int);
columnVal.AddDefaultConstraint("defVal").Text = "1";
table.Columns.Add(columnVal);

table.Create();

columnVal.DefaultConstraint.Drop();
columnVal.Refresh();

columnVal.AddDefaultConstraint("defVal").Text = "2";
columnVal.Alter();

database.Drop();

Column 实例上的最后一个 Alter() 抛出异常:

System.InvalidOperationException:Microsoft SMO 在提交期间失败:Microsoft.SqlServer.Management.Smo.FailedOperationException:更改列 'val' 失败。 ---> Microsoft.SqlServer.Management.Smo.SmoException: 不允许修改Column 对象的DefaultConstraintName 属性。您必须使用所需的 属性.

删除并重新创建对象

2016 SMO 中不存在 "DefaultConstraintName" 属性(根据官方文档)。这是 SMO 的错误还是我还能做些什么?

好的,答案是:在 COLUMN 上添加默认约束需要更改 TABLE,而不是更改列,而不是调用 columnVal.Alter( ) 我需要调用 table.Alter()。现在我想到了这一点,这似乎很明显,因为当您需要添加默认约束时,您实际上会使用此 SQL 命令:

ALTER TABLE [test_tbl]
    ADD CONSTRAINT [defVal] DEFAULT ((2)) FOR [val]

像往常一样,Microsoft frameworks/libraries 提供有关实际情况的糟糕信息(请参阅抛出的异常消息)。我希望这对其他人有用。