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(); }
internal void Reset() { _endKind = null; _inverseNavigationProperty = null; _inverseEndKind = null; _constraint = null; _associationMappingConfiguration = null; }
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; }
// <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; }
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 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; }