c# - SSDT TSqlModel.DeleteObjects 方法的行为不符合预期

标签 c# sql-server sql-server-data-tools

我一直在尝试使用 TSqlModel 方法 DeleteObjects 以编程方式从数据库项目中删除某些用户。问题是,当我调用该方法时,用户仍保留在模型中。我想知道我是否正确调用了该方法。这与我正在做的事情很接近:

modelFromDacpac.DeleteObjects(@"DOMAIN\user");

当我运行以下代码查看它是否真的消失时,用户仍然在那里!

var tst_delete= modelFromDacpac.GetObjects(User.TypeClass, new ObjectIdentifier(@"DOMAIN\user"), DacQueryScopes.Default).FirstOrDefault();

tst_delete 不为 null,且名称与 “DOMAIN\user” 匹配。

知道我做错了什么吗?

最佳答案

DeleteObject 方法调用之前,我插入以下行 - 其中 sqlobj 对象是一个 TSqlObject 引用我尝试删除的用户

//For some reason, the logins aren't scripted objects within the DACPAC, and so cannot be deleted using the DeleteObjects method - or maybe they simply cannot be found.
modelFromDacpac.ConvertToScriptedObject(sqlobj, "DOMAIN_user.sql");

然后我调用 DeleteObject 方法,如下所示:

modelFromDacpac.DeleteObjects("DOMAIN_user.sql");

我不确定为什么这有效,但它确实有效。我的猜测是,DeleteObject 方法对于如何以及在何处查找对象非常挑剔。或者,也许某些对象(例如用户)以某种非标准方式存储,这会阻止 DeleteObjects 找到它们。不管是什么原因,只要显式地将用户转换为具有给定名称的脚本对象,并将该给定名称传递给 DeleteObjects 方法,它就可以工作。

我有点担心我不知道它为什么有效。另一个问题是它没有出现在 TSqlModel 对象的官方文档中: https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.dac.model.tsqlmodel_methods(v=sql.120).aspx

但它确实有效。至少到目前为止。

关于c# - SSDT TSqlModel.DeleteObjects 方法的行为不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41600557/

相关文章:

sql - 在 DateTime 上加入有时会在 Access 和 SQL Server 之间失败

sql-server - 如何使用VBA加速Access和SQL Server之间的表传输?

sql-server - "Value cannot be null. Parameter name: reportedElement"将新的 Always Encrypted 列添加到现有表时

c# - 无法编写表达式函数成员

c# - 可选列表中的用户控件 - 最好的方法是什么?

c# - 添加 .NET Framework DLL 作为对 Windows 应用商店应用程序的引用

c# - 关于重构为抽象类的基本问题

sql-server - datetimeoffset 的夏令时支持 (SQL Server)

sql - 如何在 Visual Studio 中使用 SSDT 重命名表

C#负对齐格式化