2017-01-11 9 views
1

私は、TSqlModelメソッドDeleteObjectsを使用して、データベースプロジェクトから特定のユーザーをプログラムで削除しようとしています。問題は、メソッドを呼び出すと、ユーザーがモデルに残っていることです。私はメソッドを正しく呼び出すのだろうかと思います。ここで私はやっているものに近いものです:SSDT 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"に一致する名前を持っています。

私が間違っていることを知っていますか?

答えて

1

DeleteObjectのメソッド呼び出しに先立ち、I:あなたはそれを展開することにしたくない場合は、ここでは、展開時にログインを除外するために、私の1のような展開の要因を使用することができます次の行を挿入します - ここで、sqlobjオブジェクトは削除しようとしているユーザーを参照するTSqlObjectです

modelFromDacpac.ConvertToScriptedObject(sqlobj、 "DOMAIN_user.sql"); //何らかの理由でログインがスクリプト化されていませんDACPAC内のオブジェクトであるため、DeleteObjectsメソッドを使用して削除することはできません。あるいは単に見つけられないかもしれません。

私は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

しかし、それは動作します。少なくとも、これまでのところ。

0

DeleteObjectは同じ方法で私を捕まえました:) - スクリプト名を渡したときにAddOrUpdateを使って追加したスクリプトだけを削除し、Deleteは同じスクリプト名を使用します。

あなたがしなければならないことは、新しいモデルを作成し、削除したいもの以外すべてを追加することです。

なぜログインを削除しますか?

https://the.agilesql.club/Blogs/Ed-Elliott/HOWTO-Filter-Dacpac-Deployments

エド

+0

私はagilesql.clubで概説したアプローチを試しましたが、それはもっと問題を引き起こしました。データベース内の一部のオブジェクトがマスタdbのテーブルを参照していたため、フィルタ処理されたDACPACのビルドに失敗しました。しかし、私は、オブジェクトを削除する前にConvertToScriptedObjectメソッドを使用すると、それが機能することを発見しました。私はすぐに私自身の解決策を投稿しようとします。 –

関連する問題