Beispiel #1
0
 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);
 }
Beispiel #2
0
        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));
 }