Exemplo n.º 1
0
        private void Insert(ISupportDbState obj)
        {
            // Don't need to insert objects that aren't modified.
            // Don't set IsNew to false since this is still a new object (it just can't be saved).
            if (!obj.DbState.IsModified)
            {
                return;
            }

            var values = GetChangedValues(obj);
            var id     = Insert(obj.DbState.TableName, values, obj.DbState.Identity == null ? null : obj.DbState.Identity.FieldName);

            if (obj.DbState.Identity != null)
            {
                if (id == null)
                {
                    throw new InvalidOperationException("Error inserting the db object {0}. Expected an identity value to be returned.".Fmt(obj));
                }
                else
                {
                    obj.DbState.Identity.Value = id.Value;
                }
            }

            // The object is now saved. Set it so it's not saved again (unless modified)
            obj.DbState.SetOriginals();
            obj.DbState.IsNew = false;
        }
Exemplo n.º 2
0
        private void Update(ISupportDbState obj)
        {
            var key    = GetKey(obj);
            var values = GetChangedValues(obj);

            var count = Update(obj.DbState.TableName, key, values);

            if (count != 1)
            {
                throw new InvalidOperationException("Failed to properly update the db object {0}. Expected to update only 1 record but actually updated {1}.".Fmt(obj, count));
            }

            // The object is now saved. Set it so it's not saved again (unless modified)
            obj.DbState.SetOriginals();
        }
Exemplo n.º 3
0
        private void Delete(ISupportDbState obj)
        {
            // Don't need to delete new objects since they aren't in the database yet.
            if (obj.DbState.IsNew)
            {
                return;
            }

            var key = GetKey(obj);

            var count = Delete(obj.DbState.TableName, key);

            if (count != 1)
            {
                throw new InvalidOperationException("Failed to properly delete the db object {0}. Expected to update only 1 record but actually deleted {1}.".Fmt(obj, count));
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Saves a database object to the database.
        /// </summary>
        /// <param name="obj"></param>
        public void Save(ISupportDbState obj)
        {
            var state = obj.DbState;

            if (state.IsDeleted)
            {
                Delete(obj);
            }
            else if (state.IsNew)
            {
                Insert(obj);
            }
            else if (state.IsModified)
            {
                Update(obj);
            }
        }
Exemplo n.º 5
0
        private NameValue[] GetChangedValues(ISupportDbState obj)
        {
            var values = new List <NameValue>();

            foreach (var fld in obj.DbState.Fields)
            {
                if (fld == obj.DbState.Identity)
                {
                    continue;
                }
                if (!fld.IsModified)
                {
                    continue;
                }
                values.Add(new NameValue(fld.FieldName, fld.GetValue(), fld.GetValueType()));
            }

            return(values.ToArray());
        }
Exemplo n.º 6
0
        private NameValue[] GetKey(ISupportDbState obj)
        {
            var key = new List <NameValue>();

            var id = obj.DbState.Identity;

            if (id != null)
            {
                key.Add(new NameValue(id.FieldName, id.GetValue(), id.GetValueType()));
            }
            else
            {
                foreach (var fld in obj.DbState.Key)
                {
                    key.Add(new NameValue(fld.FieldName, fld.GetValue(), fld.GetValueType()));
                }
            }

            return(key.ToArray());
        }
Exemplo n.º 7
0
 /// <summary>
 /// Creates an instance of DbObjectState.
 /// </summary>
 /// <param name="owner"></param>
 /// <param name="tableName"></param>
 public DbObjectState(ISupportDbState owner, string tableName)
 {
     Owner     = owner;
     TableName = tableName;
 }