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); } }
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); } } }