override public bool VisitRelationship(QueryBuilderMappingParser.RelationshipContext context) { if (Pass == 2) { // RelationshipCardinality deveria fazer parte de RelationshipConnection Relationship relationship = new Relationship(context.name.Text); foreach (QueryBuilderMappingParser.AttributeContext ac in context.attribute()) { relationship.AddAttribute(ac.name.Text, ac.type.Text, ac.multivalued != null, ac.primarykey != null); } foreach (var end in context.relationshipEnd()) { RelationshipEnd rend = new RelationshipEnd(); try { var target = EntityRelationshipModel.FindByName(end.name.Text); if (target.GetType() != typeof(Entity)) { Errors.Add($"Error 003: (line {end.name.Line}:{end.name.Column}): relationship end '{end.name.Text}' is not an Entity!"); } else { rend.TargetEntity = (Entity)target; relationship.AddRelationshipEnd(rend); } } catch (Exception) { Errors.Add($"Error 004: (line {end.name.Line}:{end.name.Column}): relationship end '{end.name.Text}' not found!"); } } EntityRelationshipModel.Elements.Add(relationship); } return(true); }
/// <summary> /// Visit a parse tree produced by <see cref="QueryBuilderMappingParser.relationship"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitRelationship([NotNull] QueryBuilderMappingParser.RelationshipContext context) { return(VisitChildren(context)); }
/// <summary> /// Exit a parse tree produced by <see cref="QueryBuilderMappingParser.relationship"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitRelationship([NotNull] QueryBuilderMappingParser.RelationshipContext context) { }