Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不允许修改列对象的DefaultConstraintName属性_C#_Smo - Fatal编程技术网

C# 不允许修改列对象的DefaultConstraintName属性

C# 不允许修改列对象的DefaultConstraintName属性,c#,smo,C#,Smo,我正在尝试在一个旧项目上使用官方的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, "t

我正在尝试在一个旧项目上使用官方的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();
列实例上的最后一个Alter()引发异常:

System.InvalidOperationException:Microsoft SMO在提交期间失败:Microsoft.SqlServer.Management.SMO.FailedOperationException:列“val”的Alter失败。-->Microsoft.SqlServer.Management.Smo.Smo异常:不允许修改列对象的DefaultConstraintName属性。必须删除并重新创建具有所需属性的对象


2016年SMO中不存在“DefaultConstraintName”财产(根据官方文件)。这是SMO的错误还是我能做些什么?

好的,下面是答案:在列上添加默认约束需要更改表,而不是列so,而不是调用columnVal.Alter(),我需要调用TABLE.Alter()。现在我考虑一下,这似乎有点明显,因为当您需要添加默认约束时,您实际上会使用以下SQL命令:

ALTER TABLE [test_tbl]
    ADD CONSTRAINT [defVal] DEFAULT ((2)) FOR [val]
与往常一样,Microsoft框架/库提供了关于实际发生情况的糟糕信息(请参阅引发异常的消息)。我希望这对其他人有用