Example #1
0
        public DataSchema Build()
        {
            var sqlDataModels = new List <SqlDataModel>();
            var buildCtx      = new BuildContext();

            foreach (var kvp in _sqlEntityConfigurations)
            {
                buildCtx.SqlBuilders.Add(
                    SqlDataModelBuilder.Create(kvp.Key, this, kvp.Value)
                    );
            }

            foreach (var builder in buildCtx.SqlBuilders)
            {
                builder.DefineModelFields(buildCtx);
            }

            foreach (var builder in buildCtx.SqlBuilders)
            {
                builder.DefineRelationshipFields(buildCtx);
            }

            foreach (var builder in buildCtx.SqlBuilders)
            {
                sqlDataModels.Add(builder.Build(buildCtx));
            }

            return(new DataSchema(
                       new SqlSchema(sqlDataModels, _sqlMethodCallConverters)
                       ));
        }
Example #2
0
        public void Apply(BuildContext context, BuildStep buildStep, SqlEntityConfiguration sqlEntityConfiguration,
                          SqlDataModelBuilder sqlDataModelBuilder)
        {
            if (buildStep != BuildStep.DefineFields)
            {
                return;
            }

            sqlDataModelBuilder.ModelledFields.Add(FieldConfiguration);
        }
 public ModelState(SqlDataModelBuilder modelBuilder, IReadOnlyList <string> basePath,
                   SqlStorageField <TEntity> foreignKeyField)
 {
     SqlFieldConfigurations = modelBuilder.ModelledFields;
     BasePath          = basePath;
     JoinSpecification = new JoinSpecification <TEntity>(foreignKeyField.JoinSpecification, typeof(T),
                                                         $"_{string.Join("_", basePath)}", new JoinColumnPair(
                                                             foreignKeyField.ColumnName,
                                                             SqlFieldConfigurations.First(q => q.Options.IsPrimaryKey).Options.ColumnName
                                                             ));
 }
        public void Apply(BuildContext context, BuildStep buildStep, SqlEntityConfiguration sqlEntityConfiguration,
                          SqlDataModelBuilder sqlDataModelBuilder)
        {
            if (buildStep != BuildStep.DefineRelationships)
            {
                return;
            }

            var typeModel = TypeModel.GetModelOf(sqlEntityConfiguration.EntityType);

            ModelFields(typeModel.Fields, new string[0]);

            void ModelFields(IReadOnlyList <PropertyField> fields, string[] parentPath)
            {
                foreach (var field in fields)
                {
                    var fieldGraphPath = new FieldGraphPath <PropertyField>(
                        parentPath.Concat(new[] { field.FieldName }).ToArray(),
                        field
                        );

                    if (SqlTypeHelper.GetDataType(field.FieldType.Type) == null)
                    {
                        if (!IsRegisteredEntity(context, field.FieldType.Type))
                        {
                            ModelFields(field.FieldModel.Fields, fieldGraphPath.Path);
                        }
                        else
                        {
                            //  build a fk relationship
                            var model           = context.SqlBuilders.First(q => q.EntityType == field.FieldType.Type);
                            var foreignKeyField = model.ModelledFields.FirstOrDefault(q => q.Options.IsPrimaryKey);
                            if (foreignKeyField == null)
                            {
                                throw new Exception("Referenced entity missing primary key field.");
                            }

                            var fieldConfig = SqlFieldConfiguration.Create(field)
                                              .ColumnName($"{string.Join("_", fieldGraphPath.Path)}_{foreignKeyField.Options.ColumnName}")
                                              .DataType(foreignKeyField.Options.SqlDataType)
                                              .IsNullable(true)
                                              .ForeignKey(foreignKeyField.PropertyPath);
                            fieldConfig.PropertyPath = fieldGraphPath;

                            sqlDataModelBuilder.ModelledFields.Add(fieldConfig);
                        }
                    }
                }
            }
        }
Example #5
0
        public void Apply(BuildContext context, BuildStep buildStep, SqlEntityConfiguration sqlEntityConfiguration,
                          SqlDataModelBuilder sqlDataModelBuilder)
        {
            if (buildStep != BuildStep.DefineFields)
            {
                return;
            }

            var typeModel = TypeModel.GetModelOf(sqlEntityConfiguration.EntityType);

            ModelFields(typeModel.Fields, new string[0]);

            void ModelFields(IReadOnlyList <PropertyField> fields, string[] parentPath)
            {
                foreach (var field in fields)
                {
                    var fieldGraphPath = new FieldGraphPath <PropertyField>(
                        parentPath.Concat(new[] { field.FieldName }).ToArray(),
                        field
                        );

                    if (FieldAlreadyModelled(sqlDataModelBuilder.ModelledFields, fieldGraphPath))
                    {
                        continue;
                    }

                    if (SqlTypeHelper.GetDataType(field.FieldType.Type) == null)
                    {
                        //  not an SQL primitive type, if it's not defined in builder auto-config sub properties
                        if (IsRegisteredEntity(context, field.FieldType.Type))
                        {
                            continue;
                        }

                        ModelFields(field.FieldModel.Fields, fieldGraphPath.Path);
                    }
                    else
                    {
                        sqlDataModelBuilder.ModelledFields.Add(CreateFieldConfiguration(field, fieldGraphPath));
                    }
                }
            }
        }
Example #6
0
        public void Apply(BuildContext context, BuildStep buildStep, SqlEntityConfiguration sqlEntityConfiguration,
                          SqlDataModelBuilder sqlDataModelBuilder)
        {
            if (buildStep != BuildStep.DefineFields)
            {
                return;
            }

            if (sqlDataModelBuilder.ModelledFields.Any(q => q.Options.IsPrimaryKey))
            {
                return;
            }

            var idField = sqlDataModelBuilder.ModelledFields.FirstOrDefault(
                q => q.PropertyPath.Path.SequenceEqual(new[] { "Id" })
                );

            if (idField == null)
            {
                return;
            }

            idField.PrimaryKey();
        }
 public ModelState(SqlDataModelBuilder modelBuilder, IReadOnlyList <string> basePath)
 {
     SqlFieldConfigurations = modelBuilder.ModelledFields;
     BasePath          = basePath;
     JoinSpecification = null;
 }