public int Edit(Entity entity)
        {
            if (entity.Key.Value == null)
            {
                Error(IlaroAdminResources.EntityKeyIsNull);
                return(0);
            }

            var existingItem = GetEntity(entity, entity.Key.Value);

            if (existingItem == null)
            {
                Error(IlaroAdminResources.EntityNotExist);
                return(0);
            }

            var table = new DynamicModel(AdminInitialise.ConnectionString, tableName: entity.TableName, primaryKeyField: entity.Key.ColumnName);

            var expando = new ExpandoObject();
            var filler  = expando as IDictionary <String, object>;

            foreach (var property in entity.CreateProperties(getForeignCollection: false))
            {
                filler[property.ColumnName] = property.Value;
            }
            var cmd = table.CreateUpdateCommand(expando, entity.Key.Value);

            foreach (var property in entity.Properties.Where(x => x.IsForeignKey && x.IsCollection))
            {
                var actualRecords = GetRecords(property.ForeignEntity, new List <IEntityFilter> {
                    new ForeignEntityFilter(entity.Key, entity.Key.Value.ToStringSafe())
                });
                var idsToRemoveRelation = actualRecords.Select(x => x.KeyValue);
                idsToRemoveRelation = idsToRemoveRelation.Except(property.Values.OfType <string>());
                // UPDATE {TableName} SET {ForeignKey} = {FKValue} WHERE {PrimaryKey} In ({PKValues});
                var updateFormat = Environment.NewLine + ";UPDATE {0} SET {1} = {2} WHERE {3} In ({4})";
                if (idsToRemoveRelation.Any())
                {
                    cmd.CommandText += Environment.NewLine + string.Format(updateFormat, property.ForeignEntity.TableName, entity.Key.ColumnName, "NULL", property.ForeignEntity.Key.ColumnName, DecorateSqlValue(idsToRemoveRelation.OfType <object>().ToList(), property.ForeignEntity.Key));
                }
                cmd.CommandText += Environment.NewLine + string.Format(updateFormat, property.ForeignEntity.TableName, entity.Key.ColumnName, DecorateSqlValue(entity.Key.Value, entity.Key), property.ForeignEntity.Key.ColumnName, DecorateSqlValue(property.Values, property.ForeignEntity.Key));
            }
            var savedItems = table.Execute(cmd);

            // TODO: get info about changed properties
            AddEntityChange(entity.Name, entity.Key.StringValue, EntityChangeType.Update);

            ClearProperties(entity);

            return(savedItems);
        }