/// <summary> /// Set EntityState row for entity to complete. /// </summary> /// <param name="dbContext">Database context.</param> /// <param name="entity">Entity name.</param> /// <param name="success">Bool success.</param> /// <param name="txid">Transaction ID.</param> /// <param name="count">Items processed.</param> /// <param name="message">Error message if success = 0.</param> /// <returns>DateTime finishtime to synchronize EntityState rows with EntityStateHistory´.</returns> public static DateTime SetEntityStateDone(DawaReplicationDBContext dbContext, string entity, bool success, long?txid, int?count, string message = null) { if (dbContext == null) { throw new ArgumentNullException(nameof(dbContext)); } if (entity == null) { throw new ArgumentNullException(nameof(entity)); } var finishtime = DateTime.Now; var row = dbContext.Entitystate.Single(c => c.Entity == entity.ToLower()); row.Txid = success ? txid : row.Txid; row.Success = success; row.Successtime = success ? finishtime : row.Successtime; row.SuccesstimeChange = success && count.GetValueOrDefault() > 0 ? finishtime : row.SuccesstimeChange; row.Finishtime = finishtime; row.Count = count; row.Message = message; row.MonitoringIgnoreError = row.MonitoringIgnoreError == false || row.MonitoringIgnoreError == null ? false : true; dbContext.Update(row); dbContext.SaveChanges(); return(finishtime); }
/// <summary> /// Create row in EntityStateHistory table for current transaction. /// </summary> /// <param name="dbContext">Database context.</param> /// <param name="mode">EntityProcessMode mode. Udtraek/Update/DAGI.</param> /// <param name="entity">Entity name.</param> /// <param name="txidTil">Transaction ID for updating the table up to.</param> /// <returns>DateTime to synchronize between EntityState tables.</returns> public static DateTime SetEntityStateHistoryStart(DawaReplicationDBContext dbContext, EntityProcessMode mode, string entity, long?txidTil) { if (dbContext == null) { throw new ArgumentNullException(nameof(dbContext)); } if (entity == null) { throw new ArgumentNullException(nameof(entity)); } entity = entity.ToLower(); EntitystateHistory row = new EntitystateHistory { Entity = entity, }; row.TxidFra = (mode == EntityProcessMode.Udtraek || mode == EntityProcessMode.Dagi) ? -1 : dbContext.EntitystateHistory.Where(c => c.Entity == entity && c.Success == true).OrderByDescending(c => c.Starttime).First().TxidTil; row.TxidTil = mode == EntityProcessMode.Dagi ? null : txidTil; row.Success = null; row.Starttime = DateTime.Now; row.Finishtime = null; row.InsertUpdateCount = null; row.DeleteCount = null; row.Message = null; dbContext.Add(row); dbContext.SaveChanges(); return(row.Starttime); }
/// <summary> /// Create a new row in Entitystate for given entity. /// </summary> /// <param name="dbContext">Database context.</param> /// <param name="mode">EntityProcessMode. Udtraek/Update/Dagi.</param> /// <param name="entity">Entity name.</param> /// <param name="txid">Transaction ID.</param> public static void SetEntityStateStart(DawaReplicationDBContext dbContext, EntityProcessMode mode, string entity, long txid) { if (dbContext == null) { throw new ArgumentNullException(nameof(dbContext)); } if (entity == null) { throw new ArgumentNullException(nameof(entity)); } entity = entity.ToLower(); // Create entity if missing: if (!dbContext.Entitystate.Any(c => c.Entity == entity)) { var entitystate = new Entitystate { Entity = entity, }; dbContext.Add(entitystate); dbContext.SaveChanges(); } var row = dbContext.Entitystate.Single(c => c.Entity == entity); row.Txid = mode == EntityProcessMode.Update ? row.Txid : txid; row.Success = null; row.Successtime = null; row.SuccesstimeChange = row.SuccesstimeChange; row.Starttime = DateTime.Now; row.Finishtime = null; row.Count = null; row.Message = null; dbContext.Update(row); dbContext.SaveChanges(); }
/// <summary> /// Runs a cleanup job in the EntityStateHistory table, deleting old rows. /// </summary> /// <param name="days">Number of days after which rows should be deleted.</param> /// <returns>int number of deleted records.</returns> public static int CleanupOldEntityStateRecords(int days) { var retval = 0; using (var context = new DawaReplicationDBContext()) { var oldRecords = context.EntitystateHistory.Where(c => (DateTime.Now - c.Starttime).TotalDays > days); retval = oldRecords.Count(); context.EntitystateHistory.RemoveRange(oldRecords); context.SaveChanges(); } return(retval); }
public static void DeleteOldRows(DawaReplicationDBContext dbContext, string name, DateTime date) { if (dbContext == null) { throw new ArgumentNullException(nameof(dbContext)); } switch (name) { case "steder": dbContext.Dagi_Steder.RemoveRange(dbContext.Dagi_Steder.Where(c => c.EntityUpdated < date)); dbContext.SaveChanges(); break; case "stednavne": dbContext.Dagi_Stednavne.RemoveRange(dbContext.Dagi_Stednavne.Where(c => c.EntityUpdated < date)); dbContext.SaveChanges(); break; default: break; } }
/// <summary> /// Updates an EntityStateHistory row after transaction is completed. /// </summary> /// <param name="dbContext">Database context.</param> /// <param name="entity">Entity name.</param> /// <param name="success">Bool success.</param> /// <param name="starttime">Start time.</param> /// <param name="finishtime">Time of completion.</param> /// <param name="txidFra">Updated entity from transaction Id txidFra.</param> /// <param name="insertUpdateCount">Inserted or updated row count.</param> /// <param name="deleteCount">Deleted row count.</param> /// <param name="message">Error message if success = 0.</param> public static void SetEntityStateHistoryDone(DawaReplicationDBContext dbContext, string entity, bool success, DateTime starttime, DateTime finishtime, long?txidFra, int?insertUpdateCount, int?deleteCount, string message = null) { if (dbContext == null) { throw new ArgumentNullException(nameof(dbContext)); } var row = dbContext.EntitystateHistory.Single(c => c.Entity == entity.ToLower() && c.Starttime == starttime); // var row = dbContext.EntitystateHistory.OrderByDescending(x => x.Starttime).Where(c => c.Entity == entity.ToLower()).First(); row.TxidFra = success == true ? txidFra : row.TxidFra; row.Success = success; row.Finishtime = finishtime; row.InsertUpdateCount = success == true ? insertUpdateCount : null; row.DeleteCount = success == true ? deleteCount : null; row.Message = message; dbContext.Update(row); dbContext.SaveChanges(); }