/// <summary> /// Starts a new transaction - lock database to garantee that only one processes is in a transaction /// </summary> public void Begin() { if (_level == 0) { // lock (or try to) datafile _disk.Lock(); // get header page from DISK to check changeID var header = _disk.ReadPage <HeaderPage>(0); // if changeID was changed, file was changed by another process if (header.ChangeID != _cache.Header.ChangeID) { _cache.Clear(header); } } _level++; }
private void DoRecovery(BinaryReader reader) { // open disk service using (var disk = new DiskService(_connectionString)) { disk.Lock(); // while pages, read from redo, write on disk while (reader.BaseStream.Position != reader.BaseStream.Length) { var page = this.ReadPageJournal(reader); disk.WritePage(page); } reader.Close(); disk.UnLock(); } }