static DcTypeBase() { Assembly assembly = typeof(EntityBase).GetTypeInfo().Assembly; foreach (var t in assembly.DefinedTypes) { if (typeof(EntityBase).IsAssignableFrom(t.AsType())) { var modelType = new ModelType(t); DictionaryOfModelTypesKeyedOnTypeName.Add(modelType.TypeInfo.FullName, modelType); DictionaryOfModelTypesKeyedOnTypeDbId.Add(modelType.TypeDbId, modelType); } } var allModelTypes = DictionaryOfModelTypesKeyedOnTypeName.Values; foreach (var modelType in allModelTypes) { modelType._NotAbstractTypeDbIds.AddRange(allModelTypes.Where(t => !t.TypeInfo.IsAbstract && modelType.TypeInfo.IsAssignableFrom(t.TypeInfo)).Select(t => t.TypeDbId)); var baseType = modelType.TypeInfo.BaseType; while (baseType != null) { ModelType baseModelType; if (baseType.FullName != null && DictionaryOfModelTypesKeyedOnTypeName.TryGetValue(baseType.FullName, out baseModelType)) { modelType._BaseTypeDbId = baseModelType.TypeDbId; break; } baseType = baseType.GetTypeInfo().BaseType; } } }
public static bool TryGetNotAbstractIncludingDerivedTypeDbIds( IEnumerable <string> modelTypeNames, out HashSet <int> concreteTypeNames) { concreteTypeNames = new HashSet <int>(); foreach (var typeName in modelTypeNames) { ModelType modelType; if (!DictionaryOfModelTypesKeyedOnTypeName.TryGetValue(typeName, out modelType)) { concreteTypeNames = null; return(false); } concreteTypeNames.UnionWith(modelType.NotAbstractTypeDbIds); } return(true); }
public static bool TryGetModelType(string typeName, out ModelType modelType) { return(DictionaryOfModelTypesKeyedOnTypeName.TryGetValue(typeName, out modelType)); }