/// <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++; }
/// <summary> /// Get a page from cache or from disk (and put on cache) /// </summary> public T GetPage <T>(uint pageID) where T : BasePage, new() { var page = _cache.GetPage <T>(pageID); if (page == null) { page = _disk.ReadPage <T>(pageID); _cache.AddPage(page); } return(page); }