Beispiel #1
0
        private NavigationPropertyConfiguration(NavigationPropertyConfiguration source)
        {
            DebugCheck.NotNull(source);

            _navigationProperty        = source._navigationProperty;
            _endKind                   = source._endKind;
            _inverseNavigationProperty = source._inverseNavigationProperty;
            _inverseEndKind            = source._inverseEndKind;

            _constraint = source._constraint == null
                              ? null
                              : source._constraint.Clone();

            _associationMappingConfiguration
                = source._associationMappingConfiguration == null
                      ? null
                      : source._associationMappingConfiguration.Clone();

            DeleteAction = source.DeleteAction;
            IsNavigationPropertyDeclaringTypePrincipal = source.IsNavigationPropertyDeclaringTypePrincipal;

            _modificationStoredProceduresConfiguration
                = source._modificationStoredProceduresConfiguration == null
                      ? null
                      : source._modificationStoredProceduresConfiguration.Clone();
        }
        private NavigationPropertyConfiguration(NavigationPropertyConfiguration source)
        {
            DebugCheck.NotNull(source);

            _navigationProperty = source._navigationProperty;
            _endKind = source._endKind;
            _inverseNavigationProperty = source._inverseNavigationProperty;
            _inverseEndKind = source._inverseEndKind;

            _constraint = source._constraint == null
                              ? null
                              : source._constraint.Clone();

            _associationMappingConfiguration
                = source._associationMappingConfiguration == null
                      ? null
                      : source._associationMappingConfiguration.Clone();

            DeleteAction = source.DeleteAction;
            IsNavigationPropertyDeclaringTypePrincipal = source.IsNavigationPropertyDeclaringTypePrincipal;

            _modificationFunctionsConfiguration
                = source._modificationFunctionsConfiguration == null
                      ? null
                      : source._modificationFunctionsConfiguration.Clone();
        }
Beispiel #3
0
 internal void Reset()
 {
     _endKind = null;
     _inverseNavigationProperty = null;
     _inverseEndKind            = null;
     _constraint = null;
     _associationMappingConfiguration = null;
 }
Beispiel #4
0
        private void HandleMultiplicityAttribute(XmlReader reader)
        {
            RelationshipMultiplicity multiplicity;

            if (!RelationshipMultiplicityConverter.TryParseMultiplicity(reader.Value, out multiplicity))
            {
                this.AddError(ErrorCode.InvalidMultiplicity, EdmSchemaErrorSeverity.Error, reader, (object)Strings.InvalidRelationshipEndMultiplicity((object)this.ParentElement.Name, (object)reader.Value));
            }
            this._multiplicity = new RelationshipMultiplicity?(multiplicity);
        }
 /// <summary>
 /// Handle the Multiplicity attribute
 /// </summary>
 /// <param name="reader">reader positioned at Type attribute</param>
 private void HandleMultiplicityAttribute(XmlReader reader)
 {
     Debug.Assert(reader != null);
     RelationshipMultiplicity multiplicity;
     if (!TryParseMultiplicity(reader.Value, out multiplicity))
     {
         AddError(ErrorCode.InvalidMultiplicity, EdmSchemaErrorSeverity.Error, reader, System.Data.Entity.Strings.InvalidRelationshipEndMultiplicity(ParentElement.Name, reader.Value));
     }
     _multiplicity = multiplicity;
 }
Beispiel #6
0
        // <summary>
        // Handle the Multiplicity attribute
        // </summary>
        // <param name="reader"> reader positioned at Type attribute </param>
        private void HandleMultiplicityAttribute(XmlReader reader)
        {
            DebugCheck.NotNull(reader);
            RelationshipMultiplicity multiplicity;

            if (!RelationshipMultiplicityConverter.TryParseMultiplicity(reader.Value, out multiplicity))
            {
                AddError(
                    ErrorCode.InvalidMultiplicity, EdmSchemaErrorSeverity.Error, reader,
                    Strings.InvalidRelationshipEndMultiplicity(ParentElement.Name, reader.Value));
            }
            _multiplicity = multiplicity;
        }
Beispiel #7
0
        internal override void Validate()
        {
            base.Validate();
            RelationshipMultiplicity?multiplicity = this.Multiplicity;

            if ((multiplicity.GetValueOrDefault() != RelationshipMultiplicity.Many ? 0 : (multiplicity.HasValue ? 1 : 0)) != 0 && this.Operations.Count != 0)
            {
                this.AddError(ErrorCode.EndWithManyMultiplicityCannotHaveOperationsSpecified, EdmSchemaErrorSeverity.Error, (object)Strings.EndWithManyMultiplicityCannotHaveOperationsSpecified((object)this.Name, (object)this.ParentElement.FQName));
            }
            if (this.ParentElement.Constraints.Count != 0 || this.Multiplicity.HasValue)
            {
                return;
            }
            this.AddError(ErrorCode.EndWithoutMultiplicity, EdmSchemaErrorSeverity.Error, (object)Strings.EndWithoutMultiplicity((object)this.Name, (object)this.ParentElement.FQName));
        }
        private static NavigationProperty ConvertToNavigationProperty(
            EntityType declaringEntityType,
            System.Data.Entity.Core.SchemaObjectModel.NavigationProperty somNavigationProperty,
            DbProviderManifest providerManifest,
            Converter.ConversionCache convertedItemCache,
            Dictionary <SchemaElement, GlobalItem> newGlobalItems)
        {
            EntityType       endMemberType   = (EntityType)Converter.LoadSchemaElement(somNavigationProperty.Type, providerManifest, convertedItemCache, newGlobalItems);
            AssociationType  associationType = (AssociationType)Converter.LoadSchemaElement((System.Data.Entity.Core.SchemaObjectModel.SchemaType)somNavigationProperty.Relationship, providerManifest, convertedItemCache, newGlobalItems);
            IRelationshipEnd end             = (IRelationshipEnd)null;

            somNavigationProperty.Relationship.TryGetEnd(somNavigationProperty.ToEnd.Name, out end);
            RelationshipMultiplicity?multiplicity1 = end.Multiplicity;
            EdmType edmType = (multiplicity1.GetValueOrDefault() != RelationshipMultiplicity.Many ? 0 : (multiplicity1.HasValue ? 1 : 0)) == 0 ? (EdmType)endMemberType : (EdmType)endMemberType.GetCollectionType();
            RelationshipMultiplicity?multiplicity2 = end.Multiplicity;
            TypeUsage typeUsage;

            if ((multiplicity2.GetValueOrDefault() != RelationshipMultiplicity.One ? 0 : (multiplicity2.HasValue ? 1 : 0)) != 0)
            {
                typeUsage = TypeUsage.Create(edmType, new FacetValues()
                {
                    Nullable = (FacetValueContainer <bool?>) new bool?(false)
                });
            }
            else
            {
                typeUsage = TypeUsage.Create(edmType);
            }
            Converter.InitializeAssociationEndMember(associationType, somNavigationProperty.ToEnd, endMemberType);
            Converter.InitializeAssociationEndMember(associationType, somNavigationProperty.FromEnd, declaringEntityType);
            NavigationProperty navigationProperty = new NavigationProperty(somNavigationProperty.Name, typeUsage);

            navigationProperty.RelationshipType = (RelationshipType)associationType;
            navigationProperty.ToEndMember      = (RelationshipEndMember)associationType.Members[somNavigationProperty.ToEnd.Name];
            navigationProperty.FromEndMember    = (RelationshipEndMember)associationType.Members[somNavigationProperty.FromEnd.Name];
            if (somNavigationProperty.Documentation != null)
            {
                navigationProperty.Documentation = Converter.ConvertToDocumentation(somNavigationProperty.Documentation);
            }
            Converter.AddOtherContent((SchemaElement)somNavigationProperty, (MetadataItem)navigationProperty);
            return(navigationProperty);
        }
 internal void Reset()
 {
     _endKind = null;
     _inverseNavigationProperty = null;
     _inverseEndKind = null;
     _constraint = null;
     _associationMappingConfiguration = null;
 }
Beispiel #10
0
 /// <summary>
 /// Handle the Multiplicity attribute
 /// </summary>
 /// <param name="reader">reader positioned at Type attribute</param>
 private void HandleMultiplicityAttribute(XmlReader reader)
 {
     Debug.Assert(reader != null);
     RelationshipMultiplicity multiplicity;
     if (!TryParseMultiplicity(reader.Value, out multiplicity))
     {
         AddError(ErrorCode.InvalidMultiplicity, EdmSchemaErrorSeverity.Error, reader, System.Data.Entity.Strings.InvalidRelationshipEndMultiplicity(ParentElement.Name, reader.Value));
     }
     _multiplicity = multiplicity;
 }
Beispiel #11
0
        internal override void Validate()
        {
            base.Validate();
            this._principalRole.Validate();
            this._dependentRole.Validate();
            if (!ReferentialConstraint.ReadyForFurtherValidation(this._principalRole) || !ReferentialConstraint.ReadyForFurtherValidation(this._dependentRole))
            {
                return;
            }
            IRelationshipEnd end1 = this._principalRole.End;
            IRelationshipEnd end2 = this._dependentRole.End;

            if (this._principalRole.Name == this._dependentRole.Name)
            {
                this.AddError(ErrorCode.SameRoleReferredInReferentialConstraint, EdmSchemaErrorSeverity.Error, (object)Strings.SameRoleReferredInReferentialConstraint((object)this.ParentElement.Name));
            }
            bool isKeyProperty1;
            bool areAllPropertiesNullable1;
            bool isAnyPropertyNullable1;
            bool isSubsetOfKeyProperties1;

            ReferentialConstraint.IsKeyProperty(this._dependentRole, end2.Type, out isKeyProperty1, out areAllPropertiesNullable1, out isAnyPropertyNullable1, out isSubsetOfKeyProperties1);
            bool isKeyProperty2;
            bool areAllPropertiesNullable2;
            bool isAnyPropertyNullable2;
            bool isSubsetOfKeyProperties2;

            ReferentialConstraint.IsKeyProperty(this._principalRole, end1.Type, out isKeyProperty2, out areAllPropertiesNullable2, out isAnyPropertyNullable2, out isSubsetOfKeyProperties2);
            if (!isKeyProperty2)
            {
                this.AddError(ErrorCode.InvalidPropertyInRelationshipConstraint, EdmSchemaErrorSeverity.Error, (object)Strings.InvalidFromPropertyInRelationshipConstraint((object)this.PrincipalRole.Name, (object)end1.Type.FQName, (object)this.ParentElement.FQName));
            }
            else
            {
                bool flag = this.Schema.SchemaVersion <= 1.1;
                RelationshipMultiplicity relationshipMultiplicity1 = (flag ? (areAllPropertiesNullable2 ? 1 : 0) : (isAnyPropertyNullable2 ? 1 : 0)) != 0 ? RelationshipMultiplicity.ZeroOrOne : RelationshipMultiplicity.One;
                RelationshipMultiplicity relationshipMultiplicity2 = (flag ? (areAllPropertiesNullable1 ? 1 : 0) : (isAnyPropertyNullable1 ? 1 : 0)) != 0 ? RelationshipMultiplicity.ZeroOrOne : RelationshipMultiplicity.Many;
                IRelationshipEnd         relationshipEnd1          = end1;
                RelationshipMultiplicity?multiplicity1             = end1.Multiplicity;
                RelationshipMultiplicity?nullable1 = new RelationshipMultiplicity?(multiplicity1.HasValue ? multiplicity1.GetValueOrDefault() : relationshipMultiplicity1);
                relationshipEnd1.Multiplicity = nullable1;
                IRelationshipEnd         relationshipEnd2 = end2;
                RelationshipMultiplicity?multiplicity2    = end2.Multiplicity;
                RelationshipMultiplicity?nullable2        = new RelationshipMultiplicity?(multiplicity2.HasValue ? multiplicity2.GetValueOrDefault() : relationshipMultiplicity2);
                relationshipEnd2.Multiplicity = nullable2;
                RelationshipMultiplicity?multiplicity3 = end1.Multiplicity;
                if ((multiplicity3.GetValueOrDefault() != RelationshipMultiplicity.Many ? 0 : (multiplicity3.HasValue ? 1 : 0)) != 0)
                {
                    this.AddError(ErrorCode.InvalidMultiplicityInRoleInRelationshipConstraint, EdmSchemaErrorSeverity.Error, (object)Strings.InvalidMultiplicityFromRoleUpperBoundMustBeOne((object)this._principalRole.Name, (object)this.ParentElement.Name));
                }
                else
                {
                    if (areAllPropertiesNullable1)
                    {
                        RelationshipMultiplicity?multiplicity4 = end1.Multiplicity;
                        if ((multiplicity4.GetValueOrDefault() != RelationshipMultiplicity.One ? 0 : (multiplicity4.HasValue ? 1 : 0)) != 0)
                        {
                            this.AddError(ErrorCode.InvalidMultiplicityInRoleInRelationshipConstraint, EdmSchemaErrorSeverity.Error, (object)Strings.InvalidMultiplicityFromRoleToPropertyNullableV1((object)this._principalRole.Name, (object)this.ParentElement.Name));
                            goto label_13;
                        }
                    }
                    if (flag && !areAllPropertiesNullable1 || !flag && !isAnyPropertyNullable1)
                    {
                        RelationshipMultiplicity?multiplicity4 = end1.Multiplicity;
                        if ((multiplicity4.GetValueOrDefault() != RelationshipMultiplicity.One ? 1 : (!multiplicity4.HasValue ? 1 : 0)) != 0)
                        {
                            this.AddError(ErrorCode.InvalidMultiplicityInRoleInRelationshipConstraint, EdmSchemaErrorSeverity.Error, !flag ? (object)Strings.InvalidMultiplicityFromRoleToPropertyNonNullableV2((object)this._principalRole.Name, (object)this.ParentElement.Name) : (object)Strings.InvalidMultiplicityFromRoleToPropertyNonNullableV1((object)this._principalRole.Name, (object)this.ParentElement.Name));
                        }
                    }
                }
                label_13:
                RelationshipMultiplicity? multiplicity5 = end2.Multiplicity;
                if ((multiplicity5.GetValueOrDefault() != RelationshipMultiplicity.One ? 0 : (multiplicity5.HasValue ? 1 : 0)) != 0 && this.Schema.DataModel == SchemaDataModelOption.ProviderDataModel)
                {
                    this.AddError(ErrorCode.InvalidMultiplicityInRoleInRelationshipConstraint, EdmSchemaErrorSeverity.Error, (object)Strings.InvalidMultiplicityToRoleLowerBoundMustBeZero((object)this._dependentRole.Name, (object)this.ParentElement.Name));
                }
                if (!isSubsetOfKeyProperties1 && !this.ParentElement.IsForeignKey && this.Schema.DataModel == SchemaDataModelOption.EntityDataModel)
                {
                    this.AddError(ErrorCode.InvalidPropertyInRelationshipConstraint, EdmSchemaErrorSeverity.Error, (object)Strings.InvalidToPropertyInRelationshipConstraint((object)this.DependentRole.Name, (object)end2.Type.FQName, (object)this.ParentElement.FQName));
                }
                if (isKeyProperty1)
                {
                    RelationshipMultiplicity?multiplicity4 = end2.Multiplicity;
                    if ((multiplicity4.GetValueOrDefault() != RelationshipMultiplicity.Many ? 0 : (multiplicity4.HasValue ? 1 : 0)) != 0)
                    {
                        this.AddError(ErrorCode.InvalidMultiplicityInRoleInRelationshipConstraint, EdmSchemaErrorSeverity.Error, (object)Strings.InvalidMultiplicityToRoleUpperBoundMustBeOne((object)end2.Name, (object)this.ParentElement.Name));
                    }
                }
                else
                {
                    RelationshipMultiplicity?multiplicity4 = end2.Multiplicity;
                    if ((multiplicity4.GetValueOrDefault() != RelationshipMultiplicity.Many ? 1 : (!multiplicity4.HasValue ? 1 : 0)) != 0)
                    {
                        this.AddError(ErrorCode.InvalidMultiplicityInRoleInRelationshipConstraint, EdmSchemaErrorSeverity.Error, (object)Strings.InvalidMultiplicityToRoleUpperBoundMustBeMany((object)end2.Name, (object)this.ParentElement.Name));
                    }
                }
                if (this._dependentRole.RoleProperties.Count != this._principalRole.RoleProperties.Count)
                {
                    this.AddError(ErrorCode.MismatchNumberOfPropertiesInRelationshipConstraint, EdmSchemaErrorSeverity.Error, (object)Strings.MismatchNumberOfPropertiesinRelationshipConstraint);
                }
                else
                {
                    for (int index = 0; index < this._dependentRole.RoleProperties.Count; ++index)
                    {
                        if (this._dependentRole.RoleProperties[index].Property.Type != this._principalRole.RoleProperties[index].Property.Type)
                        {
                            this.AddError(ErrorCode.TypeMismatchRelationshipConstraint, EdmSchemaErrorSeverity.Error, (object)Strings.TypeMismatchRelationshipConstraint((object)this._dependentRole.RoleProperties[index].Name, (object)this._dependentRole.End.Type.Identity, (object)this._principalRole.RoleProperties[index].Name, (object)this._principalRole.End.Type.Identity, (object)this.ParentElement.Name));
                        }
                    }
                }
            }
        }
 /// <summary>
 ///     Handle the Multiplicity attribute
 /// </summary>
 /// <param name="reader"> reader positioned at Type attribute </param>
 private void HandleMultiplicityAttribute(XmlReader reader)
 {
     DebugCheck.NotNull(reader);
     RelationshipMultiplicity multiplicity;
     if (!RelationshipMultiplicityConverter.TryParseMultiplicity(reader.Value, out multiplicity))
     {
         AddError(
             ErrorCode.InvalidMultiplicity, EdmSchemaErrorSeverity.Error, reader,
             Strings.InvalidRelationshipEndMultiplicity(ParentElement.Name, reader.Value));
     }
     _multiplicity = multiplicity;
 }