Esempio n. 1
0
 private DbTestContext NewDbTestContext()
 {
     return(new DbTestContext(DbOverride.New <SerenityDbScript>("Serenity", "DBSerenity")));
 }
Esempio n. 2
0
        private void SetupOverride(DbOverride over)
        {
            lock (syncLock)
            {
                Action setConnectionString = delegate
                {
                    SqlConnections.SetConnection(over.ConnectionKey,
                        String.Format(DbSettings.Current.ConnectionStringFormat, over.DbAlias), DbSettings.Current.Provider);
                };

                if (attachedHashes.ContainsKey(over.DbAlias))
                {
                    var currentHash = attachedHashes[over.DbAlias];

                    if (currentHash == over.ScriptHash)
                    {
                        setConnectionString();
                        return;
                    }

                    var newAlias = over.DbAlias + "_" + currentHash;
                    DbManager.DetachDb(newAlias);
                    attachedHashes.Remove(newAlias);
                    DbManager.RenameDb(over.DbAlias, newAlias);
                    attachedHashes[newAlias] = attachedHashes[over.DbAlias];
                    attachedHashes.Remove(over.DbAlias);
                }

                string possibleOldAlias = over.DbAlias + "_" + over.ScriptHash;
                if (attachedHashes.ContainsKey(possibleOldAlias))
                {
                    DbManager.DetachDb(over.DbAlias);
                    attachedHashes.Remove(over.DbAlias);
                    DbManager.RenameDb(possibleOldAlias, over.DbAlias);
                    attachedHashes.Remove(possibleOldAlias);
                    attachedHashes[over.DbAlias] = over.ScriptHash;
                    setConnectionString();
                    return;
                }

                attachedHashes.Remove(over.DbAlias);
                DbManager.DetachDb(over.DbAlias);
                var mdfFilePath = DbManager.CreateDatabaseFilesForScript(over.Script, over.ScriptHash);
                try
                {
                    DbManager.AttachDb(over.DbAlias, mdfFilePath);
                }
                catch (Exception)
                {
                    DbManager.DetachDb(over.DbAlias);
                    DbManager.DeleteDb(mdfFilePath);
                    throw;
                }

                attachedHashes[over.DbAlias] = over.ScriptHash;
                setConnectionString();
            }
        }