gpt4 book ai didi

c# - SSDT TSqlModel.DeleteObjects 方法未按预期运行

转载 作者:行者123 更新时间:2023-11-30 23:17:13 25 4
gpt4 key购买 nike

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

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

当我运行下面的代码看它是否真的消失了,用户还在!

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

tst_delete 为非空且名称与 "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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com