Beispiel #1
0
        private static void Generate(
            IEnumerable <TableDefinition> tableDefinitions,
            ProjectItem mappingsProjectItem,
            string templatePath)
        {
            // Create mapping files
            foreach (var tableDefinition in tableDefinitions)
            {
                var mappingFileName = TableDefinitionHelper.GetMappingFileName(tableDefinition) + ".cs";
                mappingsProjectItem.ProjectItems.AddFromTemplate(templatePath, mappingFileName);
            }

            // Add mapping instructions
            foreach (ProjectItem projectItem in mappingsProjectItem.ProjectItems)
            {
                var name            = projectItem.Name;
                var tableDefinition = tableDefinitions.SingleOrDefault(t => TableDefinitionHelper.GetMappingFileName(t) + ".cs" == name);
                var codeNamespace   = CodeModelHelper.GetNameSpaceFromFileCode(projectItem.FileCodeModel);
                var fullNamespace   = codeNamespace.FullName.Replace(NamespaceValues.Mappings, NamespaceValues.Models);

                // Add the import instructions.
                var fileCodeModel = (FileCodeModel2)projectItem.FileCodeModel;
                fileCodeModel.AddImport(fullNamespace);
                fileCodeModel.AddImport(NamespaceValues.OrmMappings);

                // Add inheritance to BaseMapping.
                var cls = CodeModelHelper.GetCodeClassFromFileCode(projectItem.FileCodeModel);
                cls.Access = vsCMAccess.vsCMAccessPublic;
                var fullyQualifiedName = string.Format("BaseMapping<{0}>", tableDefinition.TableName);
                cls.AddBase(fullyQualifiedName);

                // Modify the constructor
                cls.AddFunction(TableDefinitionHelper.GetMappingFileName(tableDefinition),
                                vsCMFunction.vsCMFunctionConstructor,
                                null,
                                -1,
                                vsCMAccess.vsCMAccessPublic, null);
                var constructor = (CodeFunction)cls.Children.Item(1);
                var startPoint  = constructor.GetStartPoint(vsCMPart.vsCMPartBody).CreateEditPoint();
                startPoint.StartOfLine();
                startPoint.Indent();
                startPoint.Insert("ToTable(\"" + tableDefinition.TableSchema + "." + tableDefinition.TableName + "\"); \n");

                foreach (var columnDefinition in tableDefinition.ColumnDefinitions)
                {
                    var statement = "Property(t => t." + columnDefinition.ColumnName + ").HasColumnName(\"" +
                                    columnDefinition.ColumnName + "\"); \n";
                    startPoint.Indent(Count: 3);
                    startPoint.Insert(statement);
                }

                startPoint.EndOfLine();
                startPoint.Indent(Count: 2);
            }
        }
Beispiel #2
0
        private static void GenerateModels(
            IEnumerable <TableDefinition> tableDefinitions,
            ProjectItem modelProjectItem,
            string templatePath)
        {
            // Generate the files
            foreach (var tableDefinition in tableDefinitions)
            {
                modelProjectItem.ProjectItems.AddFromTemplate(templatePath,
                                                              TableDefinitionHelper.GetModelFileName(tableDefinition) + ".cs");
            }

            foreach (ProjectItem projectItem in modelProjectItem.ProjectItems)
            {
                var name            = projectItem.Name;
                var tableDefinition =
                    tableDefinitions.Single(t => TableDefinitionHelper.GetModelFileName(t) + ".cs" == name);
                var cls = CodeModelHelper.GetCodeClassFromFileCode(projectItem.FileCodeModel);
                cls.Access = vsCMAccess.vsCMAccessPublic;

                // Create the fields
                foreach (var columnDefinition in tableDefinition.ColumnDefinitions)
                {
                    var type      = ColumnDefinitionHelper.GetRefTypeOfColumnDefinition(columnDefinition);
                    var fieldName = ColumnDefinitionHelper.GetPropertyName(columnDefinition);
                    cls.AddVariable(
                        fieldName,
                        type,
                        -1,
                        vsCMAccess.vsCMAccessPrivate);
                }

                // Create the properties
                foreach (var columnDefinition in tableDefinition.ColumnDefinitions)
                {
                    var          type      = ColumnDefinitionHelper.GetRefTypeOfColumnDefinition(columnDefinition);
                    var          fieldName = ColumnDefinitionHelper.GetPropertyName(columnDefinition);
                    CodeProperty property  = cls.AddProperty(columnDefinition.ColumnName,
                                                             columnDefinition.ColumnName,
                                                             type, -1,
                                                             vsCMAccess.vsCMAccessPublic,
                                                             null);

                    // For more information about how to add a property read this book :
                    // http://tinyurl.com/pao4fu5
                    var epGetter =
                        property.Getter.GetStartPoint(vsCMPart.vsCMPartBody).CreateEditPoint();
                    epGetter.Delete(property.Getter.GetEndPoint(vsCMPart.vsCMPartBody));
                    epGetter.Indent();
                    epGetter.Insert(string.Format("return {0}; \n", fieldName));
                    epGetter.Indent(Count: 3);

                    var epSetter =
                        property.Setter.GetStartPoint(vsCMPart.vsCMPartBody).CreateEditPoint();
                    epSetter.Delete(property.Setter.GetEndPoint(vsCMPart.vsCMPartBody));
                    epSetter.Indent();
                    epSetter.Insert(string.Format("{0} = value; \n", fieldName));
                    epSetter.Indent(Count: 3);
                }
            }
        }