示例#1
0
        internal T UpdateObject <T>(T o, SerializedEntity entity)
        {
            foreach (var fieldName in entity.FieldNames)
            {
                FieldsByMappedName[fieldName].SetField(o, entity[fieldName]);
            }

            return(o);
        }
示例#2
0
        public bool DeleteObject(SerializedEntity o, TableSchema schema)
        {
            using (var bucket = GetBucket(schema))
            {
                for (int i = 0; i < bucket.Objects.Count; i++)
                {
                    if (schema.PrimaryKeys.All(primaryKey => Equals(bucket.Objects[i][primaryKey.MappedName], o[primaryKey.MappedName])))
                    {
                        bucket.IndexedObjects.Remove(bucket.IndexedObjects.First(kv => kv.Value == bucket.Objects[i]).Key);
                        bucket.Objects.RemoveAt(i);
                        return(true);
                    }
                }
            }

            return(false);
        }
示例#3
0
 public CompositeKey(TableSchema schema, SerializedEntity o)
 {
     _keyValues = schema.PrimaryKeys.ToDictionary(pk => pk.MappedName, pk => o[pk.MappedName]);
 }
示例#4
0
        public ObjectWriteResult WriteObject(SerializedEntity o, bool?createNew, TableSchema schema)
        {
            if (schema.IncrementKey != null && createNew == null)
            {
                return new ObjectWriteResult()
                       {
                           Success = false
                       }
            }
            ;

            var result = new ObjectWriteResult();

            using (var bucket = GetBucket(schema))
            {
                if (createNew == null)
                {
                    if (schema.PrimaryKeys.Length == 0)
                    {
                        return new ObjectWriteResult()
                               {
                                   Success = false
                               }
                    }
                    ;

                    var compositeKey = new CompositeKey(schema.PrimaryKeys.ToDictionary(field => field.MappedName, field => o[field.MappedName]));

                    createNew = !bucket.IndexedObjects.ContainsKey(compositeKey);
                }

                if (createNew.Value)
                {
                    if (schema.IncrementKey != null)
                    {
                        o[schema.IncrementKey.MappedName] = bucket.NextIncrementCounter(schema.IncrementKey.FieldName).Convert(schema.IncrementKey.FieldType);

                        result.OriginalUpdated = true;
                    }

                    var storedObject = o.AsDictionary();

                    bucket.Objects.Add(storedObject);
                    bucket.IndexedObjects[new CompositeKey(schema, o)] = storedObject;

                    result.Added   = true;
                    result.Success = true;
                }
                else
                {
                    if (schema.PrimaryKeys.Length > 0)
                    {
                        for (int i = 0; i < bucket.Objects.Count; i++)
                        {
                            if (schema.PrimaryKeys.All(primaryKey => Equals(bucket.Objects[i][primaryKey.MappedName], o[primaryKey.MappedName])))
                            {
                                var compositeKey = new CompositeKey(schema, o);

                                var storedObject = o.AsDictionary();

                                bucket.Objects[i] = storedObject;
                                bucket.IndexedObjects[compositeKey] = storedObject;
                                result.Success = true;
                                break;
                            }
                        }
                    }
                    else
                    {
                        result.Success = false;
                    }
                }
            }

            return(result);
        }