Exemplo n.º 1
0
        private void UpdateFromContext(EntityContext generatedContext, string contextDirectory)
        {
            if (generatedContext == null ||
                contextDirectory == null ||
                !Directory.Exists(contextDirectory))
            {
                return;
            }

            var parser = new ContextParser(this._loggerFactory);

            // search all cs files looking for DbContext.  need this in case of context class rename
            ParsedContext parsedContext = null;

            using (var files = Directory.EnumerateFiles(contextDirectory, "*.cs").GetEnumerator())
            {
                while (files.MoveNext() && parsedContext == null)
                {
                    parsedContext = parser.ParseFile(files.Current);
                }
            }

            if (parsedContext == null)
            {
                return;
            }

            if (generatedContext.ContextClass != parsedContext.ContextClass)
            {
                this._logger.LogInformation(
                    "Rename Context Class'{0}' to '{1}'.",
                    generatedContext.ContextClass,
                    parsedContext.ContextClass);

                generatedContext.ContextClass = parsedContext.ContextClass;
            }

            foreach (var parsedProperty in parsedContext.Properties)
            {
                var entity = generatedContext.Entities.ByClass(parsedProperty.EntityClass);
                if (entity == null)
                {
                    continue;
                }

                if (entity.ContextProperty == parsedProperty.ContextProperty)
                {
                    continue;
                }

                this._logger.LogInformation(
                    "Rename Context Property'{0}' to '{1}'.",
                    entity.ContextProperty,
                    parsedProperty.ContextProperty);

                entity.ContextProperty = parsedProperty.ContextProperty;
            }
        }
        private void ParseProperty(PropertyDeclarationSyntax node)
        {
            var returnType = node.Type
                             .DescendantNodesAndSelf()
                             .OfType <GenericNameSyntax>()
                             .FirstOrDefault();

            // expecting generic return type with 1 argument
            if (returnType == null || returnType.TypeArgumentList.Arguments.Count != 1)
            {
                return;
            }

            var returnName = returnType.Identifier.ValueText;

            if (!DataSetTypes.Contains(returnName))
            {
                return;
            }

            var firstArgument = returnType
                                .TypeArgumentList
                                .Arguments
                                .FirstOrDefault();

            // last identifier is class name
            var className = firstArgument
                            .DescendantNodesAndSelf()
                            .OfType <IdentifierNameSyntax>()
                            .Select(s => s.Identifier.ValueText)
                            .LastOrDefault();

            var propertyName = node.Identifier.ValueText;

            if (string.IsNullOrEmpty(className) || string.IsNullOrEmpty(propertyName))
            {
                return;
            }

            if (ParsedContext == null)
            {
                ParsedContext = new ParsedContext {
                    ContextClass = _currentClass
                }
            }
            ;

            var entitySet = new ParsedEntitySet
            {
                EntityClass     = className,
                ContextProperty = propertyName
            };

            ParsedContext.Properties.Add(entitySet);
        }
    }
        public override void VisitClassDeclaration(ClassDeclarationSyntax node)
        {
            var hasBaseType = node.BaseList
                              .DescendantNodes()
                              .OfType <IdentifierNameSyntax>()
                              .Any();

            if (hasBaseType)
            {
                var name = node.Identifier.Text;
                if (ParsedContext == null)
                {
                    ParsedContext = new ParsedContext();
                }

                ParsedContext.ContextClass = name;
            }

            base.VisitClassDeclaration(node);
        }
Exemplo n.º 4
0
 public void Parsed(ParsedContext context)
 {
 }