public ModelCreationScope(MetadataModelBuilder builder, IValueAccessorFactory valueAccessorFactory) { _valueAccessorFactory = valueAccessorFactory; _modelBuilder = builder; _entities = new Dictionary <Type, EntityMetadata>(); _navigationProperties = new Dictionary <EntityMetadata, Dictionary <string, NavigationPropertyMetadata> >(); Entities = new ReadOnlyDictionary <Type, EntityMetadata>(_entities); NavigationProperties = new ReadOnlyDictionary <EntityMetadata, Dictionary <string, NavigationPropertyMetadata> >(_navigationProperties); }
internal MetadataModel(MetadataModelBuilder modelBuilder, IValueAccessorFactory valueAccessorFactory) { var scope = new ModelCreationScope(modelBuilder, valueAccessorFactory); var unordered = GetSorted(modelBuilder.Entities).Where(p => !p.IsExcluded).Select(p => scope.GetEntity(p.TypeInfo.ClrType)).ToList(); var targetList = unordered.Where(p => p.BaseEntity == null).OrderBy(p => p.Name).ToList(); targetList.ForEach(p => unordered.Remove(p)); while (unordered.Any()) { var nextLayer = unordered.Where(p => targetList.Contains(p.BaseEntity)).ToList(); foreach (var item in nextLayer.OrderByDescending(p => p.Name)) { unordered.Remove(item); targetList.Insert(0, item); } } Entities = ImmutableList.CreateRange(targetList); }
public MetadataModel ToModel(IValueAccessorFactory valueAccessorFactory) { return(new MetadataModel(this, valueAccessorFactory)); }