internal static bool IsUniqueName(ModelElement elementToCheck, string proposedName, EditingContext context) { if (string.IsNullOrEmpty(proposedName) || elementToCheck == null) { return(false); } var xref = ModelToDesignerModelXRef.GetModelToDesignerModelXRef(context); var modelItem = xref.GetExisting(elementToCheck); if (modelItem != null) { string msg; return(EDMModelHelper.IsUniqueNameForExistingItem(modelItem, proposedName, true, out msg)); } return(true); }
/// <summary> /// Do the following when an Entity changes: /// - Update roles in related Associations /// </summary> /// <param name="e"></param> public override void ElementPropertyChanged(ElementPropertyChangedEventArgs e) { base.ElementPropertyChanged(e); var changedNavigationProperty = e.ModelElement as NavigationProperty; Debug.Assert(changedNavigationProperty != null); Debug.Assert( changedNavigationProperty.EntityType != null && changedNavigationProperty.EntityType.EntityDesignerViewModel != null); if ((changedNavigationProperty != null) && (changedNavigationProperty.EntityType != null) && (changedNavigationProperty.EntityType.EntityDesignerViewModel != null)) { var tx = ModelUtils.GetCurrentTx(e.ModelElement.Store); Debug.Assert(tx != null); // don't do the auto update stuff if we are in the middle of deserialization if (tx != null && !tx.IsSerializing) { var viewModel = changedNavigationProperty.EntityType.EntityDesignerViewModel; if (e.DomainProperty.Id == NameableItem.NameDomainPropertyId) { // if we are creating this, the old name will be empty so there is no 'change' to do if (String.IsNullOrEmpty((string)e.OldValue)) { return; } if (!EscherAttributeContentValidator.IsValidCsdlNavigationPropertyName(changedNavigationProperty.Name)) { throw new InvalidOperationException( String.Format( CultureInfo.CurrentCulture, Resources.Error_NavigationPropertyNameInvalid, changedNavigationProperty.Name)); } var modelEntityType = viewModel.ModelXRef.GetExisting(changedNavigationProperty.EntityType) as Model.Entity.EntityType; Debug.Assert(modelEntityType != null, "modelEntityType is null"); // ensure name is unique if (modelEntityType.LocalName.Value.Equals(changedNavigationProperty.Name, StringComparison.Ordinal)) { var msg = string.Format( CultureInfo.CurrentCulture, Model.Resources.Error_MemberNameSameAsParent, changedNavigationProperty.Name, modelEntityType.LocalName.Value); throw new InvalidOperationException(msg); } else if (!EDMModelUtils.IsUniquePropertyName(modelEntityType, changedNavigationProperty.Name, true)) { var msg = string.Format( CultureInfo.CurrentCulture, Model.Resources.Error_MemberNameNotUnique, changedNavigationProperty.Name, modelEntityType.LocalName.Value); throw new InvalidOperationException(msg); } ViewModelChangeContext.GetNewOrExistingContext(tx) .ViewModelChanges.Add(new NavigationPropertyChange(changedNavigationProperty)); } } } }
/// <summary> /// Do the following when an Entity changes: /// - Update roles in related Associations /// </summary> /// <param name="e"></param> public override void ElementPropertyChanged(ElementPropertyChangedEventArgs e) { base.ElementPropertyChanged(e); var changedProperty = e.ModelElement as Property; Debug.Assert(changedProperty != null); // this rule will fire if a PropertyRef gets deleted (this happens if a keyed property that has a sibling keyed property is deleted), // in which case we ignore this change. if (changedProperty.IsDeleted) { return; } Debug.Assert(changedProperty.EntityType != null && changedProperty.EntityType.EntityDesignerViewModel != null); if (changedProperty != null && changedProperty.EntityType != null && changedProperty.EntityType.EntityDesignerViewModel != null) { var diagram = changedProperty.EntityType.EntityDesignerViewModel.GetDiagram(); Debug.Assert(diagram != null, "EntityDesignerDiagram is null"); // if EntityType property was changed and EntityDesignerDiagram's DisplayNameAndType flag is set to true, we need to refresh the entity shape diagram. if (e.DomainProperty.Id == Property.TypeDomainPropertyId && null != diagram && diagram.DisplayNameAndType) { foreach (var pe in PresentationViewsSubject.GetPresentation(changedProperty.EntityType)) { var entityShape = pe as EntityTypeShape; if (entityShape != null) { entityShape.PropertiesCompartment.Invalidate(true); } } } var tx = ModelUtils.GetCurrentTx(e.ModelElement.Store); Debug.Assert(tx != null); // don't do the auto update stuff if we are in the middle of deserialization if (tx != null && !tx.IsSerializing) { var viewModel = changedProperty.EntityType.EntityDesignerViewModel; // ensure name is unique and valid if the name has changed if (e.DomainProperty.Id == NameableItem.NameDomainPropertyId) { // if we are creating this, the old name will be empty so there is no 'change' to do if (String.IsNullOrEmpty((string)e.OldValue)) { return; } var modelProperty = viewModel.ModelXRef.GetExisting(changedProperty) as Model.Entity.Property; Debug.Assert(modelProperty != null, "modelProperty is null"); string errorMessage; if (!EDMModelUtils.ValidatePropertyName(modelProperty, changedProperty.Name, true, out errorMessage)) { throw new InvalidOperationException(errorMessage); } ViewModelChangeContext.GetNewOrExistingContext(tx).ViewModelChanges.Add(new PropertyChange(changedProperty)); } } } }