Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }