public static bool Remove(this IDbModel m) { bool saveFailed; do { saveFailed = false; try { vChatContext dbProcess = db; dbProcess.Set(m.GetType()).Attach(m); dbProcess.Set(m.GetType()).Remove(m); dbProcess.SaveChanges(); } catch (InvalidOperationException) { return(false); } catch (DbUpdateConcurrencyException ex) { saveFailed = true; var entry = ex.Entries.Single(); entry.OriginalValues.SetValues(entry.GetDatabaseValues()); } } while (saveFailed); return(true); }
public static int GetOrdinal(this IDbModel model, string columnName, IDataReader dr) { // First attempt to get the ordinal from cache int ordinal; var type = model.GetType(); if (Ordinals.ContainsKey(type)) { var ordinals = Ordinals[type]; if (ordinals != null) { // Is our ordinal cached? if (ordinals.ContainsKey(columnName)) { return(ordinals[columnName]); } } } // GetOrdinal() is expensive so we catch the results ordinal = dr.GetOrdinal(columnName); // Cache our ordinals by IDbModel type in a staic concurrent dictionary Ordinals.AddOrUpdate(type, new ConcurrentDictionary <string, int>() { [columnName] = ordinal }, (k, v) => { v.TryAdd(columnName, ordinal); return(v); }); return(ordinal); }