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); }
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());
protected override ProvidedAssembly[] CreateBatch(int[] keys, int typeProviderId, ProvidedTypeContextHolder context) => throw new System.NotSupportedException();
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);