diff --git a/src/EFCore.Design/Design/OperationExecutor.cs b/src/EFCore.Design/Design/OperationExecutor.cs index 73dae4cbe28..e9a7295a62f 100644 --- a/src/EFCore.Design/Design/OperationExecutor.cs +++ b/src/EFCore.Design/Design/OperationExecutor.cs @@ -697,7 +697,6 @@ public abstract class OperationBase : MarshalByRefObject /// The . protected OperationBase(IOperationResultHandler resultHandler) { - EF.IsDesignTime = true; _resultHandler = resultHandler; } @@ -707,6 +706,7 @@ protected OperationBase(IOperationResultHandler resultHandler) /// The action to execute. protected virtual void Execute(Action action) { + EF.IsDesignTime = true; try { action(); @@ -715,6 +715,10 @@ protected virtual void Execute(Action action) { _resultHandler.OnError(ex.GetType().FullName!, ex.Message, ex.ToString()); } + finally + { + EF.IsDesignTime = false; + } } /// diff --git a/test/EFCore.Design.Tests/Design/OperationExecutorTest.cs b/test/EFCore.Design.Tests/Design/OperationExecutorTest.cs index ce57bf03a06..072b5f8cf5b 100644 --- a/test/EFCore.Design.Tests/Design/OperationExecutorTest.cs +++ b/test/EFCore.Design.Tests/Design/OperationExecutorTest.cs @@ -23,12 +23,15 @@ public void Operations_have_design_time_flag_set() var handler = new OperationResultHandler(); var result = "Twilight Sparkle"; + Assert.False(EF.IsDesignTime); + new MockOperation(handler, () => { Assert.True(EF.IsDesignTime); return result; }); + Assert.False(EF.IsDesignTime); Assert.Equal(result, handler.Result); }