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

时间:2018-07-24 09:49:46

标签: c# smo

我正在尝试在一个旧项目上使用正式的Microsoft.SqlServer.SharedManagementObjects NuGet程序包,该程序在SMO 2014上可以正常工作。当我尝试添加或编辑列的默认值时,我写了以下内容: / p>

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的错误,还是我还能做些其他事情?

1 个答案:

答案 0 :(得分:0)

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

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

与往常一样,Microsoft框架/库提供有关实际情况的卑劣信息(请参阅抛出异常的消息)。我希望这对其他人有用。