Beispiel #1
0
        protected DomainEntity()
        {
            entityMetadata = new Lazy <DomainEntityMetadata>(() => DomainModelMetadataRegistry.GetEntityMetadta(this.GetType()));

            ChangeTracker = new ChangeTracker(this);
            ChangeTracker.BeforePropertyChanged += (object sender, PropertyChangedExtendedEventArgs e) => OnBeforePropertyChanged(e.PropertyName, e.Before, e.After);
            ChangeTracker.AfterPropertyChanged  += (object sender, PropertyChangedExtendedEventArgs e) => OnAfterPropertyChanged(e.PropertyName, e.Before, e.After);
        }
        public DomainValueObjectMetadata GetEntityMetadata()
        {
            if (entityMetadata == null)
            {
                entityMetadata = DomainModelMetadataRegistry.GetValueObjectMetadata(this.GetType());
            }

            return(entityMetadata);
        }
        public DomainModelMetadata Build()
        {
            var scannedTypes = new HashSet <Type>();

            var rootDescriptors = entityModelBuilderConfigurations.Values
                                  .Where(x => x.IsRoot)
                                  .Select(x => ScanEntityTypeRecursive(x.EntityType, scannedTypes))
                                  .ToList();

            var entityModelBuilders = rootDescriptors
                                      .SelectManyRecursive(x => x.AggregateDescriptors)
                                      .Select(x => new EntityModelBuilder(
                                                  descriptor: x,
                                                  configuration: entityModelBuilderConfigurations.TryGetValue(x.Type, out var entityModelBuilder) ? entityModelBuilder : null
                                                  ))
                                      .ToList();

            var valueTypeModelBuilders = rootDescriptors
                                         .SelectMany(x => x.ValueTypeDescriptors)
                                         .SelectManyRecursive(x => x.ValueTypeDescriptors)
                                         .Select(x => new ValueObjectModelBuilder(
                                                     descriptor: x,
                                                     configuration: entityModelBuilderConfigurations.TryGetValue(x.Type, out var entityModelBuilder) ? entityModelBuilder : null
                                                     ))
                                         .ToList();

            var domainModel = new DomainModelMetadata(
                modelName,
                entityModelBuilders.Select(x => x.Build()).ToList(),
                valueTypeModelBuilders.Select(x => x.Build()).ToList()
                );

            DomainModelMetadataRegistry.RegisterModel(domainModel);

            return(domainModel);
        }