示例#1
0
        public IEnumerable <T> Query <T>(string propertyName, Func <object, bool> predicate)
        {
            IEnumerable <T> results = ObjectReaderWriter.QueryProperty <T>(propertyName, predicate);

            LoadXrefCollectionValues <T>(results);
            return(results);
        }
示例#2
0
        public IEnumerable <T> Query <T>(string propertyName, object value)
        {
            IEnumerable <T> results = ObjectReaderWriter.QueryProperty <T>(propertyName, value);

            LoadXrefCollectionValues <T>(results);
            return(results);
        }
示例#3
0
        public override IEnumerable <T> Query <T>(Func <T, bool> query)
        {
            IEnumerable <T> results = ObjectReaderWriter.Query <T>(query);

            LoadXrefCollectionValues <T>(results);
            return(results);
        }
示例#4
0
        public override object Retrieve(Type objectType, string uuid)
        {
            object obj = ObjectReaderWriter.Read(objectType, uuid);

            if (obj != null)
            {
                LoadXrefCollectionValues(obj);
            }
            return(obj);
        }
示例#5
0
        public override T Retrieve <T>(long id)
        {
            T value = ObjectReaderWriter.Read <T>(id);

            if (value != null)
            {
                LoadXrefCollectionValues(value);
            }
            return(value);
        }
示例#6
0
        public override IEnumerable <object> Query(Type type, Dictionary <string, object> queryParameters)
        {
            List <object> results = new List <object>();

            object[] queryResults = ObjectReaderWriter.Query(type, o =>
            {
                return(WherePropertiesEqual(queryParameters, o));
            });
            results.AddRange(queryResults);
            results.Each(o => LoadXrefCollectionValues(o));
            return(results);
        }
示例#7
0
        public override IEnumerable <T> Query <T>(Dictionary <string, object> queryParameters)
        {
            List <T> results = new List <T>();

            T[] queryResults = ObjectReaderWriter.Query <T>(o =>
            {
                return(WherePropertiesEqual(queryParameters, o));
            });
            results.AddRange(queryResults);
            LoadXrefCollectionValues <T>(results);
            return(results);
        }
示例#8
0
 public override object Update(object toUpdate)
 {
     ObjectReaderWriter.Write(toUpdate.GetType(), toUpdate);
     SaveCollections(toUpdate);
     return(toUpdate);
 }
示例#9
0
 public override object Update(Type type, object toUpdate)
 {
     ObjectReaderWriter.Write(type, toUpdate);
     SaveCollections(toUpdate);
     return(toUpdate);
 }
示例#10
0
 public override T Update <T>(T toUpdate)
 {
     ObjectReaderWriter.Write(typeof(T), toUpdate);
     SaveCollections(toUpdate);
     return(toUpdate);
 }
示例#11
0
        public void LoadXrefCollectionValues(object data)
        {
            Type   type     = data.GetType();
            Meta   meta     = data as Meta ?? new Meta(data, ObjectReaderWriter);
            Type   listType = typeof(List <>);
            string dataHash = meta.Hash;

            List <Meta> leftMeta = new List <Meta>();

            TypeXref[] leftXrefs = TypeSchema.Xrefs.Where(xref => xref.Left.Equals(type)).ToArray();
            foreach (TypeXref leftXref in leftXrefs)
            {
                Type  genericRight = listType.MakeGenericType(leftXref.Right);
                IList listInstance = genericRight.Construct <IList>();

                XrefInfo[] xrefs = ObjectReaderWriter.Query <XrefInfo>(xref => xref.LeftHash.Equals(dataHash));
                foreach (XrefInfo xref in xrefs)
                {
                    object value     = ObjectReaderWriter.ReadByHash(Type.GetType(xref.RightType), xref.RightHash);
                    Meta   valueMeta = new Meta(value, ObjectReaderWriter);
                    if (!leftMeta.Contains(valueMeta))
                    {
                        leftMeta.Add(valueMeta);
                        listInstance.Add(value);
                    }
                }
                if (leftXref.RightCollectionProperty.PropertyType.IsArray)
                {
                    Array arr = Array.CreateInstance(leftXref.Right, listInstance.Count);
                    listInstance.CopyTo(arr, 0);
                    leftXref.RightCollectionProperty.SetValue(data, arr);
                }
                else
                {
                    leftXref.RightCollectionProperty.SetValue(data, listInstance);
                }
            }

            List <Meta> rightMeta = new List <Meta>();

            TypeXref[] rightXrefs = TypeSchema.Xrefs.Where(xref => xref.Right.Equals(type)).ToArray();
            foreach (TypeXref rightXref in rightXrefs)
            {
                Type  genericLeft  = listType.MakeGenericType(rightXref.Left);
                IList listInstance = genericLeft.Construct <IList>();

                XrefInfo[] xrefs = ObjectReaderWriter.Query <XrefInfo>(xref => xref.RightHash.Equals(dataHash));
                foreach (XrefInfo xref in xrefs)
                {
                    object value     = ObjectReaderWriter.ReadByHash(Type.GetType(xref.LeftType), xref.LeftHash);
                    Meta   valueMeta = new Meta(value, ObjectReaderWriter);
                    if (!rightMeta.Contains(valueMeta))
                    {
                        rightMeta.Add(valueMeta);
                        listInstance.Add(value);
                    }
                }

                if (rightXref.LeftCollectionProperty.PropertyType.IsArray)
                {
                    Array arr = Array.CreateInstance(rightXref.Left, listInstance.Count);
                    listInstance.CopyTo(arr, 0);
                    rightXref.LeftCollectionProperty.SetValue(data, arr);
                }
                else
                {
                    rightXref.LeftCollectionProperty.SetValue(data, listInstance);
                }
            }
        }
示例#12
0
 public override bool Delete(object toDelete)
 {
     return(ObjectReaderWriter.Delete(toDelete));
 }
示例#13
0
 public override IEnumerable <object> Query(Type type, Func <object, bool> predicate)
 {
     return(ObjectReaderWriter.Query(type, predicate));
 }