Entity Frameworkを使用して作成されたそれぞれの新しいテーブルの後に、SQLスクリプトを実行します。SqlServerMigrationSqlGeneratorでSQLコードを個別に実行する方法を生成しますか?
私はこのような「CreateTableOperation」のオーバーライドを作成しました:
protected override void Generate(CreateTableOperation createTableOperation)
{
string tenantID = "tenantID";
base.Generate(createTableOperation);
//If the table contain the column "tenantID",
if ((from x in createTableOperation.Columns
where x.Name == tenantID
select x).Any()
)
{
//Add the Security Policies for this table
using (var writer = Writer())
{
writer.WriteLine("ALTER SECURITY POLICY rls.tenantAccessPolicy ");
//Note: dbo. is already part of the .Name, don't add it manually before .Name
writer.WriteLine($"ADD FILTER PREDICATE rls.fn_tenantAccessPredicateWithSuperUser([{tenantID}]) ON [{createTableOperation.Name}], ");
writer.WriteLine($"ADD BLOCK PREDICATE rls.fn_tenantAccessPredicateWithSuperUser([{tenantID}]) ON [{createTableOperation.Name}] ");
Statement(writer);
}
}
}
のは、私は新しいクラスのTEST 'を作成しましょう。 問題は、Update-Databaseをパッケージマネージャコンソールで実行したときに、SQLが1つの大きなブロックで実行され、テーブルがまだ作成されていないためにエラーが発生し、table.nameを取得しようとしています。アップデート・データベース後のパッケージマネージャの結果:それは存在しないか、またはあなたが権限を持っていないので、
CREATE TABLE [dbo].[TEST] (
[ID] [int] NOT NULL IDENTITY,
[NameTEST] [nvarchar](max),
[TenantID] [int] NOT NULL,
CONSTRAINT [PK_dbo.TEST] PRIMARY KEY ([ID])
)
ALTER SECURITY POLICY rls.tenantAccessPolicy
ADD FILTER PREDICATE rls.fn_tenantAccessPredicateWithSuperUser([tenantID]) ON [dbo.TEST],
ADD BLOCK PREDICATE rls.fn_tenantAccessPredicateWithSuperUser([tenantID]) ON [dbo.TEST]
は、オブジェクト「dbo.TEST」を見つけることができません。 の間を分割する方法はありますか?生成(createTableOperation);と私のステートメント(ライター);? (私はすでに多くの成功をせずに 'GO'で複数のことを試しました)。それとも、私はそのメソッドにコードを入れることになっていないのですか?