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; }
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(); }
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)); } }
/// <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); } }
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()); }
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()); }
/// <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; }