Ejemplo n.º 1
0
 private void GenerateFluentConfigurations()
 {
     TablesToGenerate.ForEach(table =>
     {
         GenerateEntityFluentConfiguration(table);
     });
 }
Ejemplo n.º 2
0
 private void GenerateFluentConfigurations()
 {
     TablesToGenerate.ForEach(table =>
     {
         if (Options.OutputToSingleFile)
         {
             GenerationContext.SingleFile(fb => GenerateEntityFluentConfiguration(table, fb));
         }
         else
         {
             GenerationContext.File(fb => GenerateEntityFluentConfiguration(table, fb));
         }
     });
 }
Ejemplo n.º 3
0
        private void EachTableHooks()
        {
            DynamicAssemblies.ForEach(a =>
            {
                var eachTableServices = a.GetTypes()
                                        .Where(t => t.IsClass && typeof(ITableInterceptor).IsAssignableFrom(t))
                                        .Select(t => (ITableInterceptor)Activator.CreateInstance(t, (IGenerator)this))
                                        .ToList();

                TablesToGenerate.ForEach(table =>
                {
                    eachTableServices.ForEach(t => t.InterceptTable(table));
                });
            });
        }
Ejemplo n.º 4
0
        protected override void GenerateContext()
        {
            var contextNamespace = ContextNamespace();
            var contextClassName = ContextClassName();

            Action <FileBuilder> generateContextInline = (FileBuilder fileBuilder) =>
            {
                if (!Options.OutputToSingleFile)
                {
                    var filePath = $"{Options.OutputDir}{Path.DirectorySeparatorChar}{Options.ContextName}.generated.cs";
                    fileBuilder.Path(filePath);
                }

                fileBuilder.Using("Microsoft.EntityFrameworkCore");

                fileBuilder.Namespace(contextNamespace, true, ns =>
                {
                    ns.Class(contextClassName, true, contextClass =>
                    {
                        contextClass.Partial(true).Inherits(Options.ContextBaseClassName);

                        TablesToGenerate.ForEach(table =>
                        {
                            var tableClassFullName = TableClassFullName(table);
                            var tableNamePlural    = Pluralize(table.Name);
                            contextClass.Property(tableNamePlural, true, dbSetProp =>
                            {
                                dbSetProp.Virtual(true).Type($"DbSet<{tableClassFullName}>");
                            });
                        });

                        // empty constructor.
                        contextClass.Constructor(c => c.Class(contextClass));

                        // constructor with options.
                        contextClass.Constructor(c => c
                                                 .Class(contextClass)
                                                 .Parameter(p => p.Type($"DbContextOptions<{contextClassName}>").Name("options"))
                                                 .BaseParameter("options")
                                                 );

                        // override On Configuring
                        contextClass.Method(m =>
                        {
                            m
                            .AccessModifier(AccessModifiers.Protected)
                            .Override(true)
                            .ReturnType("void")
                            .Name("OnConfiguring")
                            .Parameter(p => p.Type("DbContextOptionsBuilder").Name("optionsBuilder"));

                            if (Options.AddConnectionStringOnGenerate)
                            {
                                m.Add(() =>
                                {
                                    return(IfBuilder.Create()
                                           .RawCondition(c => c.Condition("!optionsBuilder.IsConfigured"))
                                           .Add(RawLineBuilder.Create(
                                                    "#warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings.")
                                                .NoEndOfLine())
                                           .Add(UseDatabaseEngineConnectionStringLine()));
                                });
                            }
                        });

                        // model creating.
                        contextClass.Method(m =>
                        {
                            m
                            .AccessModifier(AccessModifiers.Protected)
                            .Override(true)
                            .ReturnType("void")
                            .Name("OnModelCreating")
                            .Parameter(p => p.Type("ModelBuilder").Name("modelBuilder"));

                            TablesToGenerate.ForEach(table =>
                            {
                                AddFluentToMethod(m, table);
                            });

                            SequenceToGenerate.ForEach(sequence =>
                            {
                                var dataType   = DataTypeResolver.ResolveType(sequence);
                                var outputType = dataType.GetOutputType();
                                m.RawLine($"modelBuilder.HasSequence<{outputType}>(\"{sequence.Name}\").StartsAt({sequence.StartAt}).IncrementsBy({sequence.IncrementsBy})");
                            });
                        });
                    });
                });
            };

            if (Options.OutputToSingleFile)
            {
                GenerationContext.SingleFile(fb => generateContextInline(fb));
            }
            else
            {
                GenerationContext.FileIfPathIsSet(fb => generateContextInline(fb));
            }
        }
Ejemplo n.º 5
0
        protected override void GenerateContext()
        {
            var fileBuilder      = ResolveContextFileBuilder();
            var contextNamespace = ContextNamespace();
            var contextClassName = ContextClassName();

            fileBuilder.Using("System.Linq");
            fileBuilder.Namespace(contextNamespace, true, ns =>
            {
                ns.Class(contextClassName, true, contextClass =>
                {
                    contextClass.Partial(true).Inherits(Options.ContextBaseClassName);

                    TablesToGenerate.ForEach(table =>
                    {
                        var tableClassFullName = TableClassFullName(table);
                        var tableNamePlural    = Pluralize(table.Name);
                        contextClass.Property(tableNamePlural, true, dbSetProp =>
                        {
                            dbSetProp.Type($"System.Data.Entity.DbSet<{tableClassFullName}>");
                        });
                    });

                    contextClass.Constructor(c => c
                                             .AccessModifier(AccessModifiers.Omit)
                                             .IsStatic(true)
                                             .Class(contextClass)
                                             .RawLine($"System.Data.Entity.Database.SetInitializer<{Options.ContextName}>(null)")
                                             );

                    contextClass.Constructor(c => c
                                             .Class(contextClass)
                                             .BaseParameter($"\"{Options.ConnectionStringName ?? Options.ConnectionString}\"")
                                             .RawLine("InitializePartial()")
                                             );

                    contextClass.Constructor(c => c
                                             .Class(contextClass)
                                             .Parameter(p => p.Type("string").Name("connectionString"))
                                             .BaseParameter("connectionString")
                                             .RawLine("InitializePartial()")
                                             );

                    contextClass.Constructor(c => c
                                             .Class(contextClass)
                                             .Parameter(p => p.Type("string").Name("connectionString"))
                                             .Parameter(p => p.Type("System.Data.Entity.Infrastructure.DbCompiledModel").Name("model"))
                                             .BaseParameter("connectionString")
                                             .BaseParameter("model")
                                             .RawLine("InitializePartial()")
                                             );

                    contextClass.Method(addConfigurationMethod =>
                    {
                        addConfigurationMethod
                        .IsStatic(true)
                        .ReturnType("void")
                        .AccessModifier(AccessModifiers.Protected)
                        .Name("AddFluentConfigurations")
                        .Parameter(p => p.Type("System.Data.Entity.DbModelBuilder").Name("modelBuilder"));

                        TablesToGenerate.ForEach(table =>
                        {
                            var fcc = TableClassFullName(table) + Options.FluentConfigurationClassSuffix;
                            addConfigurationMethod.RawLine($"modelBuilder.Configurations.Add(new {fcc}())");
                        });
                    });

                    contextClass.Method(m => m
                                        .AccessModifier(AccessModifiers.Omit)
                                        .Name("OnModelCreatingPartial")
                                        .ReturnType("void")
                                        .Partial(true)
                                        .Parameter(p => p.Type("System.Data.Entity.DbModelBuilder").Name("modelBuilder"))
                                        );

                    contextClass.Method(m => m
                                        .AccessModifier(AccessModifiers.Omit)
                                        .Name("InitializePartial")
                                        .ReturnType("void")
                                        .Partial(true)
                                        );

                    contextClass.Method(m =>
                    {
                        m
                        .AccessModifier(AccessModifiers.Protected)
                        .Override(true)
                        .ReturnType("void")
                        .Name("OnModelCreating")
                        .Parameter(p => p.Type("System.Data.Entity.DbModelBuilder").Name("modelBuilder"))
                        .RawLine("base.OnModelCreating(modelBuilder)")
                        .RawLine("AddFluentConfigurations(modelBuilder)")
                        .RawLine("OnModelCreatingPartial(modelBuilder)");
                    });

                    contextClass.Method(m =>
                    {
                        m
                        .AccessModifier(AccessModifiers.Public)
                        .IsStatic(true)
                        .ReturnType("System.Data.Entity.DbModelBuilder")
                        .Name("CreateModel")
                        .Parameter(p => p.Type("System.Data.Entity.DbModelBuilder").Name("modelBuilder"))
                        .Parameter(p => p.Type("string").Name("schema"))
                        .RawLine("AddFluentConfigurations(modelBuilder)")
                        .RawLine("return modelBuilder");
                    });
                });
            });
        }