示例#1
0
        private Task _LoadRelationsAsync(object obj, IEnumerable <LambdaExpression> relationsToLoad)
        {
            return(Task.Run(() =>
            {
                TableSchema parentSchema = GetSchema(obj.GetType());

                Ir.LoadRelations(obj, LambdaRelationFinder.FindRelations(relationsToLoad, parentSchema));
            }));
        }
示例#2
0
        internal T Load(T obj, object key, params Expression <Func <T, object> >[] relationsToLoad)
        {
            if (key == null)
            {
                throw new ArgumentNullException(nameof(key));
            }

            Dictionary <string, object> primaryKey;

            var keyTypeInspector = key.GetType().Inspector();

            if (keyTypeInspector.Is(TypeFlags.Numeric | TypeFlags.Enum | TypeFlags.String | TypeFlags.Guid))
            {
                if (Schema.PrimaryKeys.Length != 1)
                {
                    throw new Exception($"Invalid key for {typeof (T)}");
                }

                primaryKey = new Dictionary <string, object>()
                {
                    { Schema.PrimaryKeys[0].MappedName, key }
                };
            }
            else
            {
                primaryKey = Schema.PrimaryKeys.ToDictionary(pk => pk.MappedName, pk => GetFieldOrPropertyValue(key, pk.FieldName));
            }

            var serializedEntity = DataProvider.ReadObject(primaryKey, Schema);

            if (serializedEntity == null)
            {
                return(default(T));
            }

            Schema.UpdateObject(obj, serializedEntity);

            var relations = LambdaRelationFinder.FindRelations(relationsToLoad, Schema);

            relations = Schema.BuildPreloadRelationSet(relations);

            Ir.LoadRelations(obj, relations);

            Fire_ObjectRead(obj);

            return(obj);
        }
示例#3
0
        private void _LoadRelations(object obj, IEnumerable <LambdaExpression> relationsToLoad /*, TableSchema parentSchema*/)
        {
            TableSchema parentSchema = GetSchema(obj.GetType());

            Ir.LoadRelations(obj, LambdaRelationFinder.FindRelations(relationsToLoad, parentSchema));
        }