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); }
public void Parsed(ParsedContext context) { }