/// <summary>Adds a new navigation property.</summary> /// <param name="entityType">The entity type to add the property to.</param> /// <param name="name">The name of the property to add.</param> /// <param name="deleteAction">The delete action of the nav property.</param> /// <param name="propertyTypeReference">The type of the property to add.</param> /// <param name="propertyInfo">If this is a CLR property, the <see cref="PropertyInfo"/> for the property, or null otherwise.</param> /// <param name="containsTarget">The contains target of the nav property</param> /// <returns>The newly created and added property.</returns> private IEdmNavigationProperty AddNavigationProperty( IEdmEntityType entityType, string name, EdmOnDeleteAction deleteAction, IEdmTypeReference propertyTypeReference, bool containsTarget) { // Create a navigation property representing one side of an association. // The partner representing the other side exists only inside this property and is not added to the target entity type, // so it should not cause any name collisions. EdmNavigationProperty navProperty = EdmNavigationProperty.CreateNavigationPropertyWithPartner( name, propertyTypeReference, /*dependentProperties*/ null, /*principalProperties*/ null, containsTarget, deleteAction, "Partner", entityType.ToTypeReference(true), /*partnerDependentProperties*/ null, /*partnerPrincipalProperties*/ null, /*partnerContainsTarget*/ false, EdmOnDeleteAction.None); ((EdmStructuredType)entityType).AddProperty(navProperty); return(navProperty); }
internal ResourceAssociationTypeEnd(string name, System.Data.Services.Providers.ResourceType resourceType, System.Data.Services.Providers.ResourceProperty resourceProperty, string multiplicity, EdmOnDeleteAction deleteBehavior) { this.name = name; this.resourceType = resourceType; this.resourceProperty = resourceProperty; this.multiplicity = multiplicity; this.deleteAction = deleteBehavior; }
/// <summary> /// Creates two navigation properties representing an association between two entity types. /// </summary> /// <param name="propertyName">Navigation property name.</param> /// <param name="propertyType">Type of the navigation property.</param> /// <param name="dependentProperties">Dependent properties of the navigation source.</param> /// <param name="principalProperties">Principal properties of the navigation source.</param> /// <param name="containsTarget">A value indicating whether the navigation source logically contains the navigation target.</param> /// <param name="onDelete">Action to take upon deletion of an instance of the navigation source.</param> /// <param name="partnerPropertyName">Navigation partner property name.</param> /// <param name="partnerPropertyType">Type of the navigation partner property.</param> /// <param name="partnerDependentProperties">Dependent properties of the navigation target.</param> /// <param name="partnerPrincipalProperties">Principal properties of the navigation target.</param> /// <param name="partnerContainsTarget">A value indicating whether the navigation target logically contains the navigation source.</param> /// <param name="partnerOnDelete">Action to take upon deletion of an instance of the navigation target.</param> /// <returns>Navigation property.</returns> public static EdmNavigationProperty CreateNavigationPropertyWithPartner( string propertyName, IEdmTypeReference propertyType, IEnumerable <IEdmStructuralProperty> dependentProperties, IEnumerable <IEdmStructuralProperty> principalProperties, bool containsTarget, EdmOnDeleteAction onDelete, string partnerPropertyName, IEdmTypeReference partnerPropertyType, IEnumerable <IEdmStructuralProperty> partnerDependentProperties, IEnumerable <IEdmStructuralProperty> partnerPrincipalProperties, bool partnerContainsTarget, EdmOnDeleteAction partnerOnDelete) { EdmUtil.CheckArgumentNull(propertyName, "propertyName"); EdmUtil.CheckArgumentNull(propertyType, "propertyType"); EdmUtil.CheckArgumentNull(partnerPropertyName, "partnerPropertyName"); EdmUtil.CheckArgumentNull(partnerPropertyType, "partnerPropertyType"); IEdmEntityType declaringType = GetEntityType(partnerPropertyType); if (declaringType == null) { throw new ArgumentException(Strings.Constructable_EntityTypeOrCollectionOfEntityTypeExpected, "partnerPropertyType"); } IEdmEntityType partnerDeclaringType = GetEntityType(propertyType); if (partnerDeclaringType == null) { throw new ArgumentException(Strings.Constructable_EntityTypeOrCollectionOfEntityTypeExpected, "propertyType"); } EdmNavigationProperty end1 = new EdmNavigationProperty( declaringType, propertyName, propertyType, dependentProperties, principalProperties, containsTarget, onDelete); EdmNavigationProperty end2 = new EdmNavigationProperty( partnerDeclaringType, partnerPropertyName, partnerPropertyType, partnerDependentProperties, partnerPrincipalProperties, partnerContainsTarget, partnerOnDelete); end1.partner = end2; end2.partner = end1; return(end1); }
/// <summary> /// Creates a new instance of EndInfo. /// </summary> /// <param name="name">name of the end.</param> /// <param name="resourceType">resource type that the end refers to.</param> /// <param name="resourceProperty">property of the end.</param> /// <param name="multiplicity">Multiplicity of the association.</param> /// <param name="deleteBehavior">Delete behavior.</param> internal ResourceAssociationTypeEnd(string name, ResourceType resourceType, ResourceProperty resourceProperty, string multiplicity, EdmOnDeleteAction deleteBehavior) { Debug.Assert(!String.IsNullOrEmpty(name), "!String.IsNullOrEmpty(name)"); Debug.Assert(resourceType != null, "type != null"); Debug.Assert(multiplicity == XmlConstants.Many || multiplicity == XmlConstants.One || multiplicity == XmlConstants.ZeroOrOne, "Invalid multiplicity value"); Debug.Assert(deleteBehavior == EdmOnDeleteAction.None || deleteBehavior == EdmOnDeleteAction.Cascade, "Invalid deleteBehavior value"); this.name = name; this.resourceType = resourceType; this.resourceProperty = resourceProperty; this.multiplicity = multiplicity; this.deleteAction = deleteBehavior; }
private EdmNavigationProperty( IEdmEntityType declaringType, string name, IEdmTypeReference type, IEnumerable<IEdmStructuralProperty> dependentProperties, bool containsTarget, EdmOnDeleteAction onDelete) : base(declaringType, name, type) { this.dependentProperties = dependentProperties; this.containsTarget = containsTarget; this.onDelete = onDelete; }
private EdmNavigationProperty( IEdmEntityType declaringType, string name, IEdmTypeReference type, IEnumerable <IEdmStructuralProperty> dependentProperties, bool containsTarget, EdmOnDeleteAction onDelete) : base(declaringType, name, type) { this.dependentProperties = dependentProperties; this.containsTarget = containsTarget; this.onDelete = onDelete; }
/// <summary> /// Creates a new Silent partner for a navigation property /// </summary> /// <param name="partnerProperty">The navigation property this is a silent partner of.</param> /// <param name="propertyDeleteAction">The on delete action for this side of the association</param> /// <param name="multiplicity">The multiplicity of this side of the association.</param> /// <param name="name">The name of this navigation property.</param> public MetadataProviderEdmSilentNavigationProperty(IEdmNavigationProperty partnerProperty, EdmOnDeleteAction propertyDeleteAction, EdmMultiplicity multiplicity, string name) { this.partner = partnerProperty; this.deleteAction = propertyDeleteAction; this.name = name; switch (multiplicity) { case EdmMultiplicity.One: this.type = new EdmEntityTypeReference(this.partner.DeclaringEntityType(), false); break; case EdmMultiplicity.ZeroOrOne: this.type = new EdmEntityTypeReference(this.partner.DeclaringEntityType(), true); break; case EdmMultiplicity.Many: this.type = new EdmCollectionTypeReference(new EdmCollectionType(new EdmEntityTypeReference(this.partner.DeclaringEntityType(), false))); break; } }
private EdmNavigationProperty( IEdmEntityType declaringType, string name, IEdmTypeReference type, IEnumerable<IEdmStructuralProperty> dependentProperties, IEnumerable<IEdmStructuralProperty> principalProperties, bool containsTarget, EdmOnDeleteAction onDelete) : base(declaringType, name, type) { this.containsTarget = containsTarget; this.onDelete = onDelete; if (dependentProperties != null) { this.referentialConstraint = EdmReferentialConstraint.Create(dependentProperties, principalProperties); } }
private EdmNavigationProperty( IEdmEntityType declaringType, string name, IEdmTypeReference type, IEnumerable <IEdmStructuralProperty> dependentProperties, IEnumerable <IEdmStructuralProperty> principalProperties, bool containsTarget, EdmOnDeleteAction onDelete) : base(declaringType, name, type) { this.containsTarget = containsTarget; this.onDelete = onDelete; if (dependentProperties != null) { this.referentialConstraint = EdmReferentialConstraint.Create(dependentProperties, principalProperties); } }
public MetadataProviderEdmSilentNavigationProperty(IEdmNavigationProperty partnerProperty, EdmOnDeleteAction propertyDeleteAction, EdmMultiplicity multiplicity, string name) { this.partner = partnerProperty; this.deleteAction = propertyDeleteAction; this.name = name; switch (multiplicity) { case EdmMultiplicity.ZeroOrOne: this.type = new EdmEntityTypeReference(this.partner.DeclaringEntityType(), true); return; case EdmMultiplicity.One: this.type = new EdmEntityTypeReference(this.partner.DeclaringEntityType(), false); return; case EdmMultiplicity.Many: this.type = new EdmCollectionTypeReference(new EdmCollectionType(new EdmEntityTypeReference(this.partner.DeclaringEntityType(), false)), false); return; } }
/// <summary> /// Compares two sets of navigation properties (expected value in CSDL, actual as IEdmStructuredType). /// </summary> /// <param name="navigationPropertyElements">The CSDL element representing the properties.</param> /// <param name="structuredType">The EDM model type to compare against.</param> private static void CompareNavigationProperties(IEnumerable <XElement> navigationPropertyElements, IEdmStructuredType structuredType) { string structuredTypeName = structuredType.TestFullName(); var navigationProperties = structuredType.Properties().OfType <IEdmNavigationProperty>().ToArray(); ExceptionUtilities.Assert(navigationPropertyElements.Count() == navigationProperties.Count(), "Unexpected number of navigation properties on type " + structuredTypeName); foreach (var navigationPropertyElement in navigationPropertyElements) { var propertyName = navigationPropertyElement.GetAttributeValue("Name"); var navigationProperty = navigationProperties.SingleOrDefault(np => np.Name == propertyName); ExceptionUtilities.Assert(navigationProperty != null, "Failed to find navigation property " + propertyName + " on type " + structuredTypeName); CompareType(navigationPropertyElement, navigationProperty.Type); // Compare NavigationProperty Partner, if present var partner = navigationPropertyElement.Attribute("Partner"); if (partner == null) { ExceptionUtilities.Assert(navigationProperty.Partner == null, "Did not expect a Partner value for navigation property " + propertyName + " on type " + structuredTypeName); } else { ExceptionUtilities.Assert(navigationProperty.Partner != null, "Expected a Partner value for navigation property " + propertyName + " on type " + structuredTypeName); ExceptionUtilities.Assert(partner.Value == navigationProperty.Partner.Name, "Unexpected value for navigation property partner"); } // Compare any referential constraints var referentialConstraintElements = navigationPropertyElement.EdmElements("ReferentialConstraint").ToArray(); if (referentialConstraintElements.Any()) { ExceptionUtilities.Assert(navigationProperty.ReferentialConstraint != null, "Expected a referential constraint to be present"); ExceptionUtilities.Assert(referentialConstraintElements.Count() == navigationProperty.ReferentialConstraint.PropertyPairs.Count(), "Unexpected number of referential constraint pairs"); foreach (var referentialConstraintElement in referentialConstraintElements) { var principalProperty = referentialConstraintElement.GetAttributeValue("ReferencedProperty"); var referencedProperty = referentialConstraintElement.GetAttributeValue("Property"); var constraintPair = navigationProperty.ReferentialConstraint.PropertyPairs .SingleOrDefault(p => p.PrincipalProperty.Name == principalProperty && p.DependentProperty.Name == referencedProperty); ExceptionUtilities.Assert(constraintPair != null, "Failed to find constraint pair (" + principalProperty + ", " + referencedProperty + ")"); } } else { ExceptionUtilities.Assert(navigationProperty.ReferentialConstraint == null, "Did not expect any referential constraints"); } // Compare OnDelete, if present var onDeleteElement = navigationPropertyElement.EdmElements("OnDelete").SingleOrDefault(); if (onDeleteElement != null) { EdmOnDeleteAction expectedAction; EdmOnDeleteAction.TryParse(onDeleteElement.GetAttributeValue("Action"), out expectedAction); ExceptionUtilities.Assert(expectedAction == navigationProperty.OnDelete, "Unexpected value for OnDelete"); } else { ExceptionUtilities.Assert(EdmOnDeleteAction.None == navigationProperty.OnDelete, "Unexpected value for OnDelete"); } } }
public CsdlOnDelete(EdmOnDeleteAction action, CsdlDocumentation documentation, CsdlLocation location) : base(documentation, location) { this.action = action; }
internal void FixUpNavigationProperty(IEdmNavigationProperty partnerProperty, bool isPrincipleEnd, EdmOnDeleteAction propertyDeleteAction) { this.partner = partnerProperty; this.isPrinciple = isPrincipleEnd; this.deleteAction = propertyDeleteAction; }
internal void WriteOperationActionElement(string elementName, EdmOnDeleteAction operationAction) { this.xmlWriter.WriteStartElement(elementName); this.WriteRequiredAttribute(CsdlConstants.Attribute_Action, operationAction.ToString(), EdmValueWriter.StringAsXml); this.WriteEndElement(); }
public CsdlOnDelete(EdmOnDeleteAction action, CsdlLocation location) : base(location) { this.action = action; }
/// <summary> /// Creates two navigation properties representing an association between two entity types. /// </summary> /// <param name="propertyName">Navigation property name.</param> /// <param name="propertyType">Type of the navigation property.</param> /// <param name="dependentProperties">Dependent properties of the navigation source.</param> /// <param name="principalProperties">Principal properties of the navigation source.</param> /// <param name="containsTarget">A value indicating whether the navigation source logically contains the navigation target.</param> /// <param name="onDelete">Action to take upon deletion of an instance of the navigation source.</param> /// <param name="partnerPropertyName">Navigation partner property name.</param> /// <param name="partnerPropertyType">Type of the navigation partner property.</param> /// <param name="partnerDependentProperties">Dependent properties of the navigation target.</param> /// <param name="partnerPrincipalProperties">Principal properties of the navigation target.</param> /// <param name="partnerContainsTarget">A value indicating whether the navigation target logically contains the navigation source.</param> /// <param name="partnerOnDelete">Action to take upon deletion of an instance of the navigation target.</param> /// <returns>Navigation property.</returns> public static EdmNavigationProperty CreateNavigationPropertyWithPartner( string propertyName, IEdmTypeReference propertyType, IEnumerable <IEdmStructuralProperty> dependentProperties, IEnumerable <IEdmStructuralProperty> principalProperties, bool containsTarget, EdmOnDeleteAction onDelete, string partnerPropertyName, IEdmTypeReference partnerPropertyType, IEnumerable <IEdmStructuralProperty> partnerDependentProperties, IEnumerable <IEdmStructuralProperty> partnerPrincipalProperties, bool partnerContainsTarget, EdmOnDeleteAction partnerOnDelete) { EdmUtil.CheckArgumentNull(propertyName, "propertyName"); EdmUtil.CheckArgumentNull(propertyType, "propertyType"); EdmUtil.CheckArgumentNull(partnerPropertyName, "partnerPropertyName"); EdmUtil.CheckArgumentNull(partnerPropertyType, "partnerPropertyType"); IEdmStructuredType declaringType = null; if (partnerPropertyType.Definition.TypeKind == EdmTypeKind.Entity) { declaringType = GetEntityType(partnerPropertyType) as IEdmEntityType; if (declaringType == null) { throw new ArgumentException(Strings.Constructable_EntityTypeOrCollectionOfEntityTypeExpected, nameof(partnerPropertyType)); } } else if (partnerPropertyType.Definition.TypeKind == EdmTypeKind.Complex) { declaringType = GetComplexType(partnerPropertyType) as IEdmComplexType; if (declaringType == null) { throw new ArgumentException(Strings.Constructable_EntityTypeOrCollectionOfEntityTypeExpected, nameof(partnerPropertyType)); } } else { throw new ArgumentException(Strings.Constructable_EntityTypeOrCollectionOfEntityTypeExpected, nameof(partnerPropertyType)); } IEdmEntityType partnerDeclaringType = GetEntityType(propertyType); if (partnerDeclaringType == null) { throw new ArgumentException(Strings.Constructable_EntityTypeOrCollectionOfEntityTypeExpected, nameof(propertyType)); } EdmNavigationProperty end1 = new EdmNavigationProperty( declaringType, propertyName, propertyType, dependentProperties, principalProperties, containsTarget, onDelete); EdmNavigationProperty end2 = new EdmNavigationProperty( partnerDeclaringType, partnerPropertyName, partnerPropertyType, partnerDependentProperties, partnerPrincipalProperties, partnerContainsTarget, partnerOnDelete); end1.SetPartner(end2, new EdmPathExpression(end2.Name)); end2.SetPartner(end1, new EdmPathExpression(end1.Name)); return(end1); }
public static EdmNavigationProperty CreateNavigationPropertyWithPartner(string propertyName, IEdmTypeReference propertyType, IEnumerable <IEdmStructuralProperty> dependentProperties, bool containsTarget, EdmOnDeleteAction onDelete, string partnerPropertyName, IEdmTypeReference partnerPropertyType, IEnumerable <IEdmStructuralProperty> partnerDependentProperties, bool partnerContainsTarget, EdmOnDeleteAction partnerOnDelete) { EdmUtil.CheckArgumentNull <string>(propertyName, "propertyName"); EdmUtil.CheckArgumentNull <IEdmTypeReference>(propertyType, "propertyType"); EdmUtil.CheckArgumentNull <string>(partnerPropertyName, "partnerPropertyName"); EdmUtil.CheckArgumentNull <IEdmTypeReference>(partnerPropertyType, "partnerPropertyType"); IEdmEntityType entityType = EdmNavigationProperty.GetEntityType(partnerPropertyType); if (entityType != null) { IEdmEntityType edmEntityType = EdmNavigationProperty.GetEntityType(propertyType); if (edmEntityType != null) { EdmNavigationProperty edmNavigationProperty = new EdmNavigationProperty(entityType, propertyName, propertyType, dependentProperties, containsTarget, onDelete); EdmNavigationProperty edmNavigationProperty1 = new EdmNavigationProperty(edmEntityType, partnerPropertyName, partnerPropertyType, partnerDependentProperties, partnerContainsTarget, partnerOnDelete); edmNavigationProperty.partner = edmNavigationProperty1; edmNavigationProperty1.partner = edmNavigationProperty; return(edmNavigationProperty); } else { throw new ArgumentException(Strings.Constructable_EntityTypeOrCollectionOfEntityTypeExpected, "propertyType"); } } else { throw new ArgumentException(Strings.Constructable_EntityTypeOrCollectionOfEntityTypeExpected, "partnerPropertyType"); } }
private CsdlOnDelete OnDeleteActionElement(XmlElementInfo element, XmlElementValueCollection childValues) { EdmOnDeleteAction action = RequiredOnDeleteAction(CsdlConstants.Attribute_Action); return(new CsdlOnDelete(action, element.Location)); }
/// <summary> /// Creates two navigation properties representing an association between two entity types. /// </summary> /// <param name="propertyName">Navigation property name.</param> /// <param name="propertyType">Type of the navigation property.</param> /// <param name="dependentProperties">Dependent properties of the navigation source.</param> /// <param name="principalProperties">Principal properties of the navigation source.</param> /// <param name="containsTarget">A value indicating whether the navigation source logically contains the navigation target.</param> /// <param name="onDelete">Action to take upon deletion of an instance of the navigation source.</param> /// <param name="partnerPropertyName">Navigation partner property name.</param> /// <param name="partnerPropertyType">Type of the navigation partner property.</param> /// <param name="partnerDependentProperties">Dependent properties of the navigation target.</param> /// <param name="partnerPrincipalProperties">Principal properties of the navigation target.</param> /// <param name="partnerContainsTarget">A value indicating whether the navigation target logically contains the navigation source.</param> /// <param name="partnerOnDelete">Action to take upon deletion of an instance of the navigation target.</param> /// <returns>Navigation property.</returns> public static EdmNavigationProperty CreateNavigationPropertyWithPartner( string propertyName, IEdmTypeReference propertyType, IEnumerable<IEdmStructuralProperty> dependentProperties, IEnumerable<IEdmStructuralProperty> principalProperties, bool containsTarget, EdmOnDeleteAction onDelete, string partnerPropertyName, IEdmTypeReference partnerPropertyType, IEnumerable<IEdmStructuralProperty> partnerDependentProperties, IEnumerable<IEdmStructuralProperty> partnerPrincipalProperties, bool partnerContainsTarget, EdmOnDeleteAction partnerOnDelete) { EdmUtil.CheckArgumentNull(propertyName, "propertyName"); EdmUtil.CheckArgumentNull(propertyType, "propertyType"); EdmUtil.CheckArgumentNull(partnerPropertyName, "partnerPropertyName"); EdmUtil.CheckArgumentNull(partnerPropertyType, "partnerPropertyType"); IEdmEntityType declaringType = GetEntityType(partnerPropertyType); if (declaringType == null) { throw new ArgumentException(Strings.Constructable_EntityTypeOrCollectionOfEntityTypeExpected, "partnerPropertyType"); } IEdmEntityType partnerDeclaringType = GetEntityType(propertyType); if (partnerDeclaringType == null) { throw new ArgumentException(Strings.Constructable_EntityTypeOrCollectionOfEntityTypeExpected, "propertyType"); } EdmNavigationProperty end1 = new EdmNavigationProperty( declaringType, propertyName, propertyType, dependentProperties, principalProperties, containsTarget, onDelete); EdmNavigationProperty end2 = new EdmNavigationProperty( partnerDeclaringType, partnerPropertyName, partnerPropertyType, partnerDependentProperties, partnerPrincipalProperties, partnerContainsTarget, partnerOnDelete); end1.partner = end2; end2.partner = end1; return end1; }
public static EdmNavigationProperty CreateNavigationPropertyWithPartner(string propertyName, IEdmTypeReference propertyType, IEnumerable<IEdmStructuralProperty> dependentProperties, bool containsTarget, EdmOnDeleteAction onDelete, string partnerPropertyName, IEdmTypeReference partnerPropertyType, IEnumerable<IEdmStructuralProperty> partnerDependentProperties, bool partnerContainsTarget, EdmOnDeleteAction partnerOnDelete) { EdmUtil.CheckArgumentNull<string>(propertyName, "propertyName"); EdmUtil.CheckArgumentNull<IEdmTypeReference>(propertyType, "propertyType"); EdmUtil.CheckArgumentNull<string>(partnerPropertyName, "partnerPropertyName"); EdmUtil.CheckArgumentNull<IEdmTypeReference>(partnerPropertyType, "partnerPropertyType"); IEdmEntityType entityType = EdmNavigationProperty.GetEntityType(partnerPropertyType); if (entityType != null) { IEdmEntityType edmEntityType = EdmNavigationProperty.GetEntityType(propertyType); if (edmEntityType != null) { EdmNavigationProperty edmNavigationProperty = new EdmNavigationProperty(entityType, propertyName, propertyType, dependentProperties, containsTarget, onDelete); EdmNavigationProperty edmNavigationProperty1 = new EdmNavigationProperty(edmEntityType, partnerPropertyName, partnerPropertyType, partnerDependentProperties, partnerContainsTarget, partnerOnDelete); edmNavigationProperty.partner = edmNavigationProperty1; edmNavigationProperty1.partner = edmNavigationProperty; return edmNavigationProperty; } else { throw new ArgumentException(Strings.Constructable_EntityTypeOrCollectionOfEntityTypeExpected, "propertyType"); } } else { throw new ArgumentException(Strings.Constructable_EntityTypeOrCollectionOfEntityTypeExpected, "partnerPropertyType"); } }
/// <summary>Adds a new navigation property.</summary> /// <param name="entityType">The entity type to add the property to.</param> /// <param name="name">The name of the property to add.</param> /// <param name="deleteAction">The delete action of the nav property.</param> /// <param name="propertyTypeReference">The type of the property to add.</param> /// <param name="propertyInfo">If this is a CLR property, the <see cref="PropertyInfo"/> for the property, or null otherwise.</param> /// <param name="containsTarget">The contains target of the nav property</param> /// <returns>The newly created and added property.</returns> private IEdmNavigationProperty AddNavigationProperty( IEdmEntityType entityType, string name, EdmOnDeleteAction deleteAction, IEdmTypeReference propertyTypeReference, bool containsTarget) { // Create a navigation property representing one side of an association. // The partner representing the other side exists only inside this property and is not added to the target entity type, // so it should not cause any name collisions. EdmNavigationProperty navProperty = EdmNavigationProperty.CreateNavigationPropertyWithPartner( name, propertyTypeReference, /*dependentProperties*/ null, /*principalProperties*/ null, containsTarget, deleteAction, "Partner", entityType.ToTypeReference(true), /*partnerDependentProperties*/ null, /*partnerPrincipalProperties*/ null, /*partnerContainsTarget*/ false, EdmOnDeleteAction.None); ((EdmStructuredType)entityType).AddProperty(navProperty); return navProperty; }
/// <summary> /// Initializes a new instance of the <see cref="ActionOnDeleteAttribute"/> class. /// </summary> /// <param name="onDeleteAction">The action applied on delete.</param> public ActionOnDeleteAttribute(EdmOnDeleteAction onDeleteAction) { OnDeleteAction = onDeleteAction; }
internal static void FixUpNavigationPropertyWithAssociationSetData(IEdmNavigationProperty navigationProperty, IEdmNavigationProperty partner, bool isPrinciple, List <IEdmStructuralProperty> dependentProperties, EdmOnDeleteAction deleteAction, EdmMultiplicity opposingMultiplicity) { MetadataProviderEdmNavigationProperty property = navigationProperty as MetadataProviderEdmNavigationProperty; if (property != null) { property.FixUpNavigationProperty(partner, isPrinciple, deleteAction); if (opposingMultiplicity == EdmMultiplicity.One) { property.Type = property.Type.Definition.ToTypeReference(false); } if ((dependentProperties != null) && !isPrinciple) { property.SetDependentProperties(dependentProperties); } } else if ((dependentProperties != null) && !isPrinciple) { ((MetadataProviderEdmSilentNavigationProperty)navigationProperty).SetDependentProperties(dependentProperties); } }
internal override void WriteNavigationOnDeleteActionElement(EdmOnDeleteAction operationAction) { this.xmlWriter.WriteStartElement(CsdlConstants.Element_OnDelete); this.WriteRequiredAttribute(CsdlConstants.Attribute_Action, operationAction.ToString(), EdmValueWriter.StringAsXml); this.WriteEndElement(); }
internal abstract void WriteNavigationOnDeleteActionElement(EdmOnDeleteAction operationAction);
internal void WriteOperationActionElement(string elementName, EdmOnDeleteAction operationAction) { this.xmlWriter.WriteStartElement(elementName); this.WriteRequiredAttribute <string>("Action", operationAction.ToString(), new Func <string, string>(EdmValueWriter.StringAsXml)); this.WriteEndElement(); }