コード例 #1
0
 protected override void AddBaseTypes(CodeTypeDeclaration type, TableImportArgumentsViewModel args)
 {
     base.AddBaseTypes(type, args);
     var primaryKeyType = args.GetPrimaryKeyType();
     if (primaryKeyType != null)
         type.BaseTypes.Add(new CodeTypeReference(args.SelectedBaseRepositoryType.Name, new CodeTypeReference(args.ModelName), new CodeTypeReference(primaryKeyType)));
 }
コード例 #2
0
        protected override void AddBaseTypes(CodeTypeDeclaration type, TableImportArgumentsViewModel args)
        {
            base.AddBaseTypes(type, args);
            var primaryKeyType = args.GetPrimaryKeyType();

            if (args.SelectedBaseRepositoryType == typeof(ICRUDRepository <,>))
            {
                type.BaseTypes.Add(new CodeTypeReference(typeof(CRUDRESTRepositoryBase <,>).Name, new CodeTypeReference(args.ModelName), new CodeTypeReference(primaryKeyType)));
            }
            else if (args.SelectedBaseRepositoryType == typeof(IReadOnlyRepository <,>))
            {
                type.BaseTypes.Add(new CodeTypeReference(typeof(ReadOnlyRESTRepositoryBase <,>).Name, new CodeTypeReference(args.ModelName), new CodeTypeReference(primaryKeyType)));
            }
            else
            {
                type.BaseTypes.Add(new CodeTypeReference(typeof(RESTRepositoryBase <,>).Name, new CodeTypeReference(args.ModelName), new CodeTypeReference(primaryKeyType)));
            }

            var interfaceName = $"I{args.SingularName}Repository";

            type.BaseTypes.Add(new CodeTypeReference(interfaceName));

            var attr = new CodeAttributeDeclaration(new CodeTypeReference(typeof(RepositoryAttribute)));

            attr.Arguments.Add(new CodeAttributeArgument(new CodeTypeOfExpression(interfaceName)));
            type.CustomAttributes.Add(attr);

            var constructor = new CodeConstructor {
                Attributes = MemberAttributes.Public
            };

            constructor.BaseConstructorArgs.Add(new CodePrimitiveExpression(args.SingularName));
            type.Members.Add(constructor);
        }
コード例 #3
0
        protected override void AddMembers(CodeTypeDeclaration type, TableImportArgumentsViewModel args)
        {
            var modelConfig = (ModelProjectConfiguration)_project;

            foreach (var column in args.Columns)
            {
                type.Members.Add(CreateAutoProperty(column.Type.ToString(), column.Name));
            }

            if (modelConfig.AdditionalProperties != null && modelConfig.AdditionalProperties.Any())
            {
                foreach (var additionalProperty in modelConfig.AdditionalProperties)
                {
                    type.Members.Add(CreateAutoProperty(additionalProperty.Type, additionalProperty.Name));
                }
            }
            if (args.Columns.Count(e => e.IsPrimaryKey) == 1)
            {
                var primary = args.Columns.First(e => e.IsPrimaryKey);
                var getKey  = new CodeSnippetTypeMember();
                getKey.Text = $"\t\t[IgnoreDataMember]\n\t\tpublic {primary.Type} GetKey =>{primary.Name};\n";
                type.Members.Add(getKey);
                var unique = new CodeTypeReference(typeof(IUniqueObject <>).Name, new CodeTypeReference(primary.Type));
                GenerateEqualsMethod(type, primary.Type);
                GenerateGetHashCodeMethod(type);
                GenerateEqualsIUniqueMethod(type, unique, primary.Type);
                GenerateEqualsModelMethod(type, primary.Type);
            }
        }
コード例 #4
0
 protected override CodeTypeDeclaration CreateType(TableImportArgumentsViewModel args)
 {
     return(new CodeTypeDeclaration(GetClassName(args))
     {
         IsClass = true,
         TypeAttributes = TypeAttributes.Public | TypeAttributes.Class
     });
 }
コード例 #5
0
        protected override void AddBaseTypes(CodeTypeDeclaration type, TableImportArgumentsViewModel args)
        {
            base.AddBaseTypes(type, args);
            var primaryKeyType = args.GetPrimaryKeyType();
            var dbmlClass      = Path.GetFileName(_solution.DatabaseConfigurations.DbmlPath) + "DataContext";
            var dbClass        = $"DB.{args.SingularName}";

            if (dbClass.EndsWith("Status"))
            {
                dbClass = dbClass.Replace("Status", "Statuse");
            }

            if (args.SelectedBaseRepositoryType == typeof(ICRUDRepository <,>))
            {
                if (_solution.LinqProjectConfiguration.UseCutomCrudBase)
                {
                    type.BaseTypes.Add(new CodeTypeReference(_solution.LinqProjectConfiguration.SelectedLinqCrudBase, new CodeTypeReference(dbClass), new CodeTypeReference(args.ModelName), new CodeTypeReference(primaryKeyType)));
                }
                else
                {
                    type.BaseTypes.Add(new CodeTypeReference(typeof(CRUDLinqRepositoryBase <, , ,>).Name, new CodeTypeReference($"DB.{dbmlClass}"), new CodeTypeReference(dbClass), new CodeTypeReference(args.ModelName), new CodeTypeReference(primaryKeyType)));
                }
            }
            else if (args.SelectedBaseRepositoryType == typeof(IReadOnlyRepository <,>))
            {
                if (_solution.LinqProjectConfiguration.UseCutomCrudBase)
                {
                    type.BaseTypes.Add(new CodeTypeReference(_solution.LinqProjectConfiguration.SelectedLinqReadBase, new CodeTypeReference(dbClass), new CodeTypeReference(args.ModelName), new CodeTypeReference(primaryKeyType)));
                }
                else
                {
                    type.BaseTypes.Add(new CodeTypeReference(typeof(ReadOnlyLinqRepositoryBase <, , ,>).Name, new CodeTypeReference($"DB.{dbmlClass}"), new CodeTypeReference(dbClass), new CodeTypeReference(args.ModelName), new CodeTypeReference(primaryKeyType)));
                }
            }
            else
            {
                type.BaseTypes.Add(new CodeTypeReference(typeof(LinqRepositoryBase <, , ,>).Name, new CodeTypeReference($"DB.{dbmlClass}"), new CodeTypeReference(dbClass), new CodeTypeReference(args.ModelName), new CodeTypeReference(primaryKeyType)));
            }

            var interfaceName = $"I{args.SingularName}Repository";

            type.BaseTypes.Add(new CodeTypeReference(interfaceName));

            var attr = new CodeAttributeDeclaration(new CodeTypeReference(typeof(RepositoryAttribute)));

            attr.Arguments.Add(new CodeAttributeArgument(new CodeTypeOfExpression(interfaceName)));
            type.CustomAttributes.Add(attr);
        }
コード例 #6
0
        protected override void AddBaseTypes(CodeTypeDeclaration type, TableImportArgumentsViewModel args)
        {
            var modelConfig = (ModelProjectConfiguration)_project;

            if (!string.IsNullOrWhiteSpace(modelConfig.AdditionalInterfaces))
            {
                foreach (var interf in modelConfig.AdditionalInterfaces.Split(';'))
                {
                    type.BaseTypes.Add(new CodeTypeReference(interf));
                }
            }
            if (args.Columns.Count(e => e.IsPrimaryKey) == 1)
            {
                var primary = args.Columns.First(e => e.IsPrimaryKey);
                var unique  = new CodeTypeReference(typeof(IUniqueObject <>).Name, new CodeTypeReference(primary.Type));
                type.BaseTypes.Add(unique);
                type.BaseTypes.Add(new CodeTypeReference(typeof(IEquatable <>).Name, unique));
                type.BaseTypes.Add(new CodeTypeReference(typeof(IEquatable <>).Name, new CodeTypeReference(GetClassName(args))));
            }
        }
コード例 #7
0
 protected override string GetClassName(TableImportArgumentsViewModel args)
 {
     return($"{args.SingularName}Repository");
 }
コード例 #8
0
 protected override string GetClassName(TableImportArgumentsViewModel args)
 {
     return(args.SingularName);
 }
コード例 #9
0
 public byte[] Generate(CoddeeSolutionInfo solution, ProjectConfiguration project, TableImportArgumentsViewModel args)
 {
     using (var ms = new MemoryStream())
     {
         Generate(solution, project, args, ms);
         return(ms.ToArray());
     }
 }
コード例 #10
0
 protected abstract string GetClassName(TableImportArgumentsViewModel args);
コード例 #11
0
 protected virtual void AddBaseTypes(CodeTypeDeclaration type, TableImportArgumentsViewModel args)
 {
 }
コード例 #12
0
 protected abstract CodeTypeDeclaration CreateType(TableImportArgumentsViewModel args);
コード例 #13
0
        public void Generate(CoddeeSolutionInfo solution, ProjectConfiguration project, TableImportArgumentsViewModel args, Stream stream)
        {
            _project  = project;
            _solution = solution;
            var compileUnit     = new CodeCompileUnit();
            var nameSpace       = new CodeNamespace(project.DefaultNamespace);
            var usingsNamespace = new CodeNamespace();

            usingsNamespace.Imports.Add(new CodeNamespaceImport("System"));
            usingsNamespace.Imports.Add(new CodeNamespaceImport("Coddee"));
            AddNamepaceImports(usingsNamespace);
            var type = CreateType(args);

            AddBaseTypes(type, args);
            AddMembers(type, args);

            nameSpace.Types.Add(type);
            compileUnit.Namespaces.Add(usingsNamespace);
            compileUnit.Namespaces.Add(nameSpace);

            CodeDomProvider      provider = CodeDomProvider.CreateProvider("CSharp");
            CodeGeneratorOptions options  = new CodeGeneratorOptions
            {
                BlankLinesBetweenMembers = false,
                BracingStyle             = "C"
            };

            using (var ms = new MemoryStream())
            {
                using (var tempsw = new StreamWriter(ms))
                {
                    provider.GenerateCodeFromCompileUnit(compileUnit, tempsw, options);
                }
                var text = Encoding.UTF8.GetString(ms.ToArray());
                text = text.Replace("This code was generated by a tool.", "This code was generated by Coddee tool.");
                var bytes = Encoding.UTF8.GetBytes(text);
                stream.Write(bytes, 0, bytes.Length);
                stream.Flush();
            }
        }