Hmmm. I would expect this to be used in code like this:

if (!EnsureCreated()) {  throw someException; }
else { // carry on assuming creation happened }

similar to e.g. the TryGetValue() syntax. At the least I think we should document what we're doing. But I would recommend that the bool represents whether or not the Database exists at the end of the call including the case where it already existed.