internal void WriteNavigationPropertyElementHeader(NavigationProperty member)
 {
     _xmlWriter.WriteStartElement(XmlConstants.NavigationProperty);
     _xmlWriter.WriteAttributeString(XmlConstants.Name, member.Name);
     _xmlWriter.WriteAttributeString(
         XmlConstants.Relationship,
         GetQualifiedTypeName(XmlConstants.Self, member.Association.Name));
     _xmlWriter.WriteAttributeString(XmlConstants.FromRole, member.GetFromEnd().Name);
     _xmlWriter.WriteAttributeString(XmlConstants.ToRole, member.ToEndMember.Name);
 }
        public void EdmNavigationProperty_BadNavigationPropertyBadFromRoleType()
        {
            var parentEntity = new EntityType("P", "N", DataSpace.CSpace);
            var targetEntity = new EntityType("T", "N", DataSpace.CSpace);
            var sourceEntity = new EntityType("S", "N", DataSpace.CSpace);

            var associationType
                = new AssociationType("A", XmlConstants.ModelNamespace_3, false, DataSpace.CSpace)
                {
                SourceEnd = new AssociationEndMember("S", sourceEntity),
                TargetEnd = new AssociationEndMember("T", targetEntity)
                };

            var navigationProperty
                = new NavigationProperty("N", TypeUsage.Create(targetEntity))
                {
                RelationshipType = associationType
                };

            parentEntity.AddMember(navigationProperty);

            var model = new EdmModel(DataSpace.CSpace);

            model.AddItem(parentEntity);

            var validationContext
                = new EdmModelValidationContext(model, true);

            DataModelErrorEventArgs errorEventArgs = null;

            validationContext.OnError += (_, e) => errorEventArgs = e;

            EdmModelSemanticValidationRules
            .EdmNavigationProperty_BadNavigationPropertyBadFromRoleType
            .Evaluate(validationContext, navigationProperty);

            Assert.NotNull(errorEventArgs);
            Assert.Same(navigationProperty, errorEventArgs.Item);
            Assert.Equal(
                Strings.BadNavigationPropertyBadFromRoleType(
                    navigationProperty.Name,
                    sourceEntity.Name,
                    navigationProperty.GetFromEnd().Name,
                    navigationProperty.Association.Name,
                    parentEntity.Name),
                errorEventArgs.ErrorMessage);
        }
 internal void WriteNavigationPropertyElementHeader(NavigationProperty member)
 {
     _xmlWriter.WriteStartElement(XmlConstants.NavigationProperty);
     _xmlWriter.WriteAttributeString(XmlConstants.Name, member.Name);
     _xmlWriter.WriteAttributeString(
         XmlConstants.Relationship,
         GetQualifiedTypeName(XmlConstants.Self, member.Association.Name));
     _xmlWriter.WriteAttributeString(XmlConstants.FromRole, member.GetFromEnd().Name);
     _xmlWriter.WriteAttributeString(XmlConstants.ToRole, member.ToEndMember.Name);
 }
        public void EdmNavigationProperty_BadNavigationPropertyBadFromRoleType()
        {
            var parentEntity = new EntityType("P", "N", DataSpace.CSpace);
            var targetEntity = new EntityType("T", "N", DataSpace.CSpace);
            var sourceEntity = new EntityType("S", "N", DataSpace.CSpace);

            var associationType
                = new AssociationType("A", XmlConstants.ModelNamespace_3, false, DataSpace.CSpace)
                      {
                          SourceEnd = new AssociationEndMember("S", sourceEntity),
                          TargetEnd = new AssociationEndMember("T", targetEntity)
                      };

            var navigationProperty
                = new NavigationProperty("N", TypeUsage.Create(targetEntity))
                      {
                          RelationshipType = associationType
                      };

            parentEntity.AddMember(navigationProperty);

            var model = new EdmModel(DataSpace.CSpace);

            model.AddItem(parentEntity);

            var validationContext
                = new EdmModelValidationContext(model, true);

            DataModelErrorEventArgs errorEventArgs = null;
            validationContext.OnError += (_, e) => errorEventArgs = e;

            EdmModelSemanticValidationRules
                .EdmNavigationProperty_BadNavigationPropertyBadFromRoleType
                .Evaluate(validationContext, navigationProperty);

            Assert.NotNull(errorEventArgs);
            Assert.Same(navigationProperty, errorEventArgs.Item);
            Assert.Equal(
                Strings.BadNavigationPropertyBadFromRoleType(
                    navigationProperty.Name,
                    sourceEntity.Name,
                    navigationProperty.GetFromEnd().Name,
                    navigationProperty.Association.Name,
                    parentEntity.Name),
                errorEventArgs.ErrorMessage);
        }