private static XElement MappingColumnCondition(ColumnConditionMapping condition) { return new XElement(mslNamespace + "Condition", new XAttribute("ColumnName", condition.Column.Name)).AddMappingConditionAttribute(condition); }
public static CSDLContainer IntegrateMSLInCSDLContainer(CSDLContainer csdlContainer, SSDLContainer ssdlContainer, XElement edmxRuntime) { XElement mappingsElement = edmxRuntime.Element(XName.Get("Mappings", edmxNamespace.NamespaceName)); if (mappingsElement == null || mappingsElement.IsEmpty) return null; XElement mappingElement = mappingsElement.Element(XName.Get("Mapping", mslNamespace.NamespaceName)); if (mappingElement == null || mappingElement.IsEmpty) return null; XElement entityContainerMappingElement = mappingElement.Element(XName.Get("EntityContainerMapping", mslNamespace.NamespaceName)); if (entityContainerMappingElement == null || entityContainerMappingElement.IsEmpty) return null; #region EntityTypes foreach (var entityTypeMappingElement in entityContainerMappingElement.Elements(XName.Get("EntitySetMapping", mslNamespace.NamespaceName)).SelectMany(entitySetElement => entitySetElement.Elements(XName.Get("EntityTypeMapping", mslNamespace.NamespaceName)))) { var typeName = entityTypeMappingElement.Attribute("TypeName").Value; if (typeName.IndexOf("(") != -1) typeName = typeName.Remove(typeName.IndexOf(")")).Substring(typeName.IndexOf("(") + 1); var entityType = csdlContainer.EntityTypes.GetByName(GetName(typeName)); entityType.Mapping.BeginInit(); var mapping = entityType.Mapping; foreach (var mappingFragmentElement in entityTypeMappingElement.Elements(XName.Get("MappingFragment", mslNamespace.NamespaceName))) { var table = ssdlContainer.EntityTypes.GetByName(mappingFragmentElement.Attribute("StoreEntitySet").Value); foreach (var scalarPropertyElement in mappingFragmentElement.Elements(XName.Get("ScalarProperty", mslNamespace.NamespaceName))) { var scalarProperty = entityType.AllScalarProperties.GetByName(scalarPropertyElement.Attribute("Name").Value); var column = table.Properties.GetByName(scalarPropertyElement.Attribute("ColumnName").Value); entityType.Mapping[scalarProperty, table] = column; } MapComplexProperties(mappingFragmentElement, mapping, entityType, table); #region Conditions foreach (var conditionElement in mappingFragmentElement.Elements(XName.Get("Condition", mslNamespace.NamespaceName))) { var columnNameAttribute = conditionElement.Attribute("ColumnName"); ConditionMapping condition; if (columnNameAttribute == null) condition = new PropertyConditionMapping { CSDLProperty = entityType.ScalarProperties.GetByName(conditionElement.Attribute("Name").Value), Table = table }; else condition = new ColumnConditionMapping { Column = table.Properties.GetByName(columnNameAttribute.Value) }; var valueAttribute = conditionElement.Attribute("Value"); if (valueAttribute == null) { if (conditionElement.Attribute("IsNull").Value == "false") condition.Operator = ConditionOperator.IsNotNull; else condition.Operator = ConditionOperator.IsNull; } else { condition.Operator = ConditionOperator.Equals; condition.Value = valueAttribute.Value; } mapping.ConditionsMapping.Add(condition); } #endregion Conditions } mapping.Init = true; #region CUD Functions var modificationFunctionMappingElement = entityTypeMappingElement.Element(XName.Get("ModificationFunctionMapping", mslNamespace.NamespaceName)); if (modificationFunctionMappingElement != null) { var insertFunctionMappingElement = modificationFunctionMappingElement.Element(XName.Get("InsertFunction", mslNamespace.NamespaceName)); if (insertFunctionMappingElement != null) mapping.InsertFunctionMapping = SetCUDFunctionMapping(ssdlContainer, entityType, insertFunctionMappingElement); var updateFunctionMappingElement = modificationFunctionMappingElement.Element(XName.Get("UpdateFunction", mslNamespace.NamespaceName)); if (updateFunctionMappingElement != null) mapping.UpdateFunctionMapping = SetCUDFunctionMapping(ssdlContainer, entityType, updateFunctionMappingElement); var deleteFunctionMappingElement = modificationFunctionMappingElement.Element(XName.Get("DeleteFunction", mslNamespace.NamespaceName)); if (deleteFunctionMappingElement != null) mapping.DeleteFunctionMapping = SetCUDFunctionMapping(ssdlContainer, entityType, deleteFunctionMappingElement); } #endregion CUD Functions entityType.Mapping.EndInit(); } #endregion EntityTypes #region Associations foreach (var associationSetMappingElement in entityContainerMappingElement.Elements(XName.Get("AssociationSetMapping", mslNamespace.NamespaceName))) { var csdlAssociation = csdlContainer.AssociationsCreated.GetByName(GetName(associationSetMappingElement.Attribute("TypeName").Value)); csdlAssociation.Mapping.BeginInit(); var table = ssdlContainer.EntityTypes.GetByName(associationSetMappingElement.Attribute("StoreEntitySet").Value); foreach (var endPropertyElement in associationSetMappingElement.Elements(XName.Get("EndProperty", mslNamespace.NamespaceName))) { NavigationProperty navigationProperty; if (csdlAssociation.PropertyEnd1Role == endPropertyElement.Attribute("Name").Value) navigationProperty = csdlAssociation.PropertyEnd1; else navigationProperty = csdlAssociation.PropertyEnd2; var navigationPropertyMapping = navigationProperty.Mapping; foreach (var scalarPropertyElement in endPropertyElement.Elements(XName.Get("ScalarProperty", mslNamespace.NamespaceName))) { var scalarProperty = navigationProperty.EntityType.AllScalarProperties.GetByName(scalarPropertyElement.Attribute("Name").Value); var column = table.Properties.GetByName(scalarPropertyElement.Attribute("ColumnName").Value); navigationPropertyMapping[scalarProperty] = column; } } foreach (var conditionElement in associationSetMappingElement.Elements(XName.Get("Condition", mslNamespace.NamespaceName))) { var columnNameAttribute = conditionElement.Attribute("ColumnName"); ColumnConditionMapping condition = new ColumnConditionMapping { Column = table.Properties.GetByName(columnNameAttribute.Value) }; ; var valueAttribute = conditionElement.Attribute("Value"); if (valueAttribute == null) { if (conditionElement.Attribute("IsNull").Value == "false") condition.Operator = ConditionOperator.IsNotNull; else condition.Operator = ConditionOperator.IsNull; } else { condition.Operator = ConditionOperator.Equals; condition.Value = valueAttribute.Value; } csdlAssociation.Mapping.ConditionsMapping.Add(condition); } csdlAssociation.Mapping.SSDLTableMapped = table; csdlAssociation.Mapping.EndInit(); } #endregion Associations #region Functions foreach (var functionMappingElement in entityContainerMappingElement.Elements(XName.Get("FunctionImportMapping", mslNamespace.NamespaceName))) csdlContainer.Functions.GetByName(functionMappingElement.Attribute("FunctionImportName").Value).SSDLFunction = ssdlContainer.Functions.GetByName(GetName(functionMappingElement.Attribute("FunctionName").Value)); #endregion Funtions return csdlContainer; }
private void ColumnConditionMapping_ConditionDeleted(ColumnConditionMapping condition) { EntityType.Mapping.ConditionsMapping.Remove(condition); columnConditionsGrid.GetBindingExpression(Grid.VisibilityProperty).UpdateTarget(); }