private StackData GetStackData(Guid associationId, bool noBeta = false) { StackData stackData = null; XmlSerializer xmlSerializer = new XmlSerializer(typeof(StackData)); // Check for existing flair var ctx = new StackFlairDataContext(cfg.ConnectionStrings["DefaultConnectionString"].ConnectionString); var existingFlair = ctx.StackFlairs.Where(f => f.Guid == associationId).SingleOrDefault(); if (existingFlair != null) { // Check for expiration DateTime storedTimestamp = existingFlair.Timestamp; DateTime expiryTimestamp = storedTimestamp.AddHours(Int32.Parse(ConfigurationManager.AppSettings["FlairDuration"])); if (expiryTimestamp > DateTime.Now) { stackData = (StackData)xmlSerializer.Deserialize(new StringReader(existingFlair.Flair)); } else { stackData = StackyWrapper.GetFlairData(associationId); existingFlair.Flair = stackData.Serialize(); existingFlair.Timestamp = DateTime.Now; ctx.SubmitChanges(); } } else { stackData = StackyWrapper.GetFlairData(associationId); ctx.StackFlairs.First(); ctx.StackFlairs.InsertOnSubmit(new App_Data.StackFlair() { Flair = stackData.Serialize(), Guid = associationId, Timestamp = DateTime.Now }); ctx.SubmitChanges(); } return(stackData); }