Ejemplo n.º 1
0
        public IEnumerable <CdmE2ERelationship> GenerateRelationships(Table table)
        {
            var fkColumns = table.Columns.Where(t => t.IsForeignKey);

            foreach (var column in fkColumns)
            {
                var relationshipName = $"relationship-{table.Name}-{column.Name}";
                var relationship     = corpus.MakeObject <CdmE2ERelationship>(CdmObjectType.E2ERelationshipDef, relationshipName);

                string fromDocumentName = resolver.GetDocumentFileName(table.Name);
                relationship.FromEntity          = $"{fromDocumentName}/{table.Name}";
                relationship.FromEntityAttribute = column.Name;

                string toDocumentName = resolver.GetDocumentFileName(column.ForeignKey.Table.Name);
                relationship.ToEntity          = $"{toDocumentName}/{column.ForeignKey.Table.Name}";
                relationship.ToEntityAttribute = column.ForeignKey.Name;

                yield return(relationship);
            }
        }
Ejemplo n.º 2
0
        public async Task <CdmManifestDefinition> GenerateCdmAsync(RelationalModel model)
        {
            CdmCorpusDefinition  corpus   = new CdmCorpusDefinition();
            CdmReferenceResolver resolver = new CdmReferenceResolver(options.ManifestName, options.EntitiesVersion);

            var outputManifestFile = Path.Combine(Path.GetFullPath(options.OutputFolder), resolver.GetManifestFileName());

            if (File.Exists(outputManifestFile))
            {
                if (options.OverrideExistingManifest)
                {
                    File.Delete(outputManifestFile);
                }
                else
                {
                    throw new Exception($"Manifest {outputManifestFile} already exists. Please use the override option.");
                }
            }

            CdmFolderDefinition folder = corpus.GetLocalRootFolder(options.OutputFolder);

            CdmManifestDefinition manifest = corpus.CreateCdmManifest(resolver.GetManifestName());

            folder.Documents.Add(manifest);

            foreach (var table in model.Tables)
            {
                string documentName = resolver.GetDocumentFileName(table.Name);
                CdmDocumentDefinition entityDocument = corpus.CreateCdmDocument(documentName);
                folder.Documents.Add(entityDocument);

                var entityGenerator        = new CdmEntityGenerator(corpus, resolver, entityDocument, options.EntitiesVersion);
                CdmEntityDefinition entity = entityGenerator.GenerateEntity(table);
                manifest.Entities.Add(entity);

                var relationshipGenerator = new CdmEntityRelationshipGenerator(corpus, resolver);
                IEnumerable <CdmE2ERelationship> relationships = relationshipGenerator.GenerateRelationships(table);
                manifest.Relationships.AddRange(relationships);
            }

            if (options.HasTimestamps)
            {
                await manifest.FileStatusCheckAsync();
            }

            if (options.HasVirtualPartition)
            {
                CreateVirtualPartitionOnEntities(corpus, manifest);
            }

            return(manifest);
        }