예제 #1
0
 protected override ProxyProvidedType[] CreateBatch(int[] keys, int typeProviderId,
                                                    ProvidedTypeContextHolder context) =>
 TypeProvidersContext.Connection.ExecuteWithCatch(() =>
                                                  ProvidedTypeProcessModel.GetProvidedTypes.Sync(keys, RpcTimeouts.Maximal))
 .Select(t => ProxyProvidedType.Create(t, typeProviderId, TypeProvidersContext,
                                       context ?? ProvidedTypeContextHolder.Create()))
 .ToArray();
        public T[] GetOrCreateBatch(int[] keys, int typeProviderId, ProvidedTypeContextHolder context)
        {
            var entities = new T[keys.Length];

            var groups = keys
                         .Select((key, i) => (key, i))
                         .GroupBy(t => t.key == ProvidedConst.DefaultId || Entities.ContainsKey(t.key));

            foreach (var group in groups)
            {
                if (group.Key)
                {
                    foreach (var(key, i) in group)
                    {
                        entities[i] = GetOrCreate(key, typeProviderId, context);
                    }
                }
                else
                {
                    var keysToCreate    = group.Select(t => t.key).ToArray();
                    var ids             = group.Select(t => t.i).ToArray();
                    var createdEntities = CreateBatch(keysToCreate, typeProviderId, context);

                    for (var i = 0; i < keysToCreate.Length; i++)
                    {
                        var entity = createdEntities[i];
                        AttachToTypeProvider(typeProviderId, keysToCreate[i], entity);
                        entities[ids[i]] = entity;
                    }
                }
            }

            return(entities);
        }
        public T GetOrCreate(int key, int typeProviderId, ProvidedTypeContextHolder context)
        {
            if (key == ProvidedConst.DefaultId)
            {
                return(null);
            }
            if (Entities.TryGetValue(key, out var providedEntity))
            {
                return(providedEntity);
            }

            providedEntity = Create(key, typeProviderId, context);
            AttachToTypeProvider(typeProviderId, key, providedEntity);

            return(providedEntity);
        }
예제 #4
0
 protected override ProxyProvidedType Create(int key, int typeProviderId,
                                             ProvidedTypeContextHolder context) =>
 ProxyProvidedType.Create(
     TypeProvidersContext.Connection.ExecuteWithCatch(() =>
                                                      ProvidedTypeProcessModel.GetProvidedType.Sync(key, RpcTimeouts.Maximal)),
     typeProviderId, TypeProvidersContext, context ?? ProvidedTypeContextHolder.Create());
예제 #5
0
 protected override ProvidedAssembly[] CreateBatch(int[] keys, int typeProviderId, ProvidedTypeContextHolder context)
 => throw new System.NotSupportedException();
예제 #6
0
 protected override ProvidedAssembly Create(int key, int typeProviderId, ProvidedTypeContextHolder context)
 => ProxyProvidedAssembly.Create(
     TypeProvidersContext.Connection.ExecuteWithCatch(() =>
                                                      ProvidedAssembliesProcessModel.GetProvidedAssembly.Sync(key)),
     TypeProvidersContext.Connection);
 protected abstract T[] CreateBatch(int[] keys, int typeProviderId, ProvidedTypeContextHolder context);
 protected abstract T Create(int key, int typeProviderId, ProvidedTypeContextHolder context);