Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataWebControls / System / Data / WebControls / EntityDataSourceReferenceGroup.cs / 1599186 / EntityDataSourceReferenceGroup.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.EntityClient; using System.Data.Metadata.Edm; using System.Diagnostics; using System.Globalization; using System.Reflection; using System.ComponentModel; using System.Data.Common; using System.Data.Objects.DataClasses; using System.Data.Objects; using System.Data; using System.Runtime.CompilerServices; namespace System.Web.UI.WebControls { ////// Groups together reference columns pointing at the same association end. /// internal abstract class EntityDataSourceReferenceGroup { private readonly AssociationSetEnd end; protected EntityDataSourceReferenceGroup(AssociationSetEnd end) { EntityDataSourceUtil.CheckArgumentNull(end, "end"); this.end = end; } internal AssociationSetEnd End { get { return this.end; } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] internal static EntityDataSourceReferenceGroup Create(Type entityType, AssociationSetEnd end) { EntityDataSourceUtil.CheckArgumentNull(entityType, "entityType"); Type groupType = typeof(EntityDataSourceReferenceGroup<>).MakeGenericType(entityType); return (EntityDataSourceReferenceGroup)Activator.CreateInstance(groupType, new object[] { end }); } internal abstract void SetKeyValues(EntityDataSourceWrapper wrapper, DictionarynewKeyValues); internal abstract EntityKey GetEntityKey(EntityDataSourceWrapper entity); } internal class EntityDataSourceReferenceGroup : EntityDataSourceReferenceGroup where T : class { public EntityDataSourceReferenceGroup(AssociationSetEnd end) : base(end) { } internal override void SetKeyValues(EntityDataSourceWrapper wrapper, Dictionary newKeyValues) { EntityDataSourceUtil.CheckArgumentNull(wrapper, "wrapper"); EntityReference reference = GetRelatedReference(wrapper); EntityKey originalEntityKeys = reference.EntityKey; if (null != newKeyValues) { if(null != originalEntityKeys) { // mix the missing keys from the original values foreach (var originalEntityKey in originalEntityKeys.EntityKeyValues) { object newKeyValue; if (newKeyValues.TryGetValue(originalEntityKey.Key, out newKeyValue)) { // if any part of the key is null, the EntityKey is null if (null == newKeyValue) { newKeyValues = null; break; } } else { // add the original value for this partial key since it is not saved in the viewstate newKeyValues.Add(originalEntityKey.Key, originalEntityKey.Value); } } } else { // what we have in the newKeyValues should be sufficient to set the key // but if any value is null, the whole key is null foreach (var newKey in newKeyValues) { if (null == newKey.Value) { newKeyValues = null; break; } } } } if (null == newKeyValues) { // if the entity key is a compound key, and if any partial key is null, then the entitykey is null reference.EntityKey = null; } else { reference.EntityKey = new EntityKey(EntityDataSourceUtil.GetQualifiedEntitySetName(End.EntitySet), (IEnumerable >)newKeyValues); } } internal override EntityKey GetEntityKey(EntityDataSourceWrapper entity) { EntityKey key = GetRelatedReference(entity).EntityKey; return key; } private EntityReference GetRelatedReference(EntityDataSourceWrapper entity) { RelationshipManager relationshipManager = entity.RelationshipManager; Debug.Assert(relationshipManager != null, "couldn't get a relationship manager"); EntityReference reference = relationshipManager.GetRelatedReference ( this.End.ParentAssociationSet.ElementType.FullName, this.End.CorrespondingAssociationEndMember.Name); return reference; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.EntityClient; using System.Data.Metadata.Edm; using System.Diagnostics; using System.Globalization; using System.Reflection; using System.ComponentModel; using System.Data.Common; using System.Data.Objects.DataClasses; using System.Data.Objects; using System.Data; using System.Runtime.CompilerServices; namespace System.Web.UI.WebControls { ////// Groups together reference columns pointing at the same association end. /// internal abstract class EntityDataSourceReferenceGroup { private readonly AssociationSetEnd end; protected EntityDataSourceReferenceGroup(AssociationSetEnd end) { EntityDataSourceUtil.CheckArgumentNull(end, "end"); this.end = end; } internal AssociationSetEnd End { get { return this.end; } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] internal static EntityDataSourceReferenceGroup Create(Type entityType, AssociationSetEnd end) { EntityDataSourceUtil.CheckArgumentNull(entityType, "entityType"); Type groupType = typeof(EntityDataSourceReferenceGroup<>).MakeGenericType(entityType); return (EntityDataSourceReferenceGroup)Activator.CreateInstance(groupType, new object[] { end }); } internal abstract void SetKeyValues(EntityDataSourceWrapper wrapper, DictionarynewKeyValues); internal abstract EntityKey GetEntityKey(EntityDataSourceWrapper entity); } internal class EntityDataSourceReferenceGroup : EntityDataSourceReferenceGroup where T : class { public EntityDataSourceReferenceGroup(AssociationSetEnd end) : base(end) { } internal override void SetKeyValues(EntityDataSourceWrapper wrapper, Dictionary newKeyValues) { EntityDataSourceUtil.CheckArgumentNull(wrapper, "wrapper"); EntityReference reference = GetRelatedReference(wrapper); EntityKey originalEntityKeys = reference.EntityKey; if (null != newKeyValues) { if(null != originalEntityKeys) { // mix the missing keys from the original values foreach (var originalEntityKey in originalEntityKeys.EntityKeyValues) { object newKeyValue; if (newKeyValues.TryGetValue(originalEntityKey.Key, out newKeyValue)) { // if any part of the key is null, the EntityKey is null if (null == newKeyValue) { newKeyValues = null; break; } } else { // add the original value for this partial key since it is not saved in the viewstate newKeyValues.Add(originalEntityKey.Key, originalEntityKey.Value); } } } else { // what we have in the newKeyValues should be sufficient to set the key // but if any value is null, the whole key is null foreach (var newKey in newKeyValues) { if (null == newKey.Value) { newKeyValues = null; break; } } } } if (null == newKeyValues) { // if the entity key is a compound key, and if any partial key is null, then the entitykey is null reference.EntityKey = null; } else { reference.EntityKey = new EntityKey(EntityDataSourceUtil.GetQualifiedEntitySetName(End.EntitySet), (IEnumerable >)newKeyValues); } } internal override EntityKey GetEntityKey(EntityDataSourceWrapper entity) { EntityKey key = GetRelatedReference(entity).EntityKey; return key; } private EntityReference GetRelatedReference(EntityDataSourceWrapper entity) { RelationshipManager relationshipManager = entity.RelationshipManager; Debug.Assert(relationshipManager != null, "couldn't get a relationship manager"); EntityReference reference = relationshipManager.GetRelatedReference ( this.End.ParentAssociationSet.ElementType.FullName, this.End.CorrespondingAssociationEndMember.Name); return reference; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ValidationErrorEventArgs.cs
- DataTableNewRowEvent.cs
- UriWriter.cs
- LayoutEngine.cs
- DialogResultConverter.cs
- WebBrowserProgressChangedEventHandler.cs
- PropertyDescriptorComparer.cs
- GeneralTransform2DTo3DTo2D.cs
- webbrowsersite.cs
- TdsParserSessionPool.cs
- ClientSettingsProvider.cs
- SqlPersistenceWorkflowInstanceDescription.cs
- UserPreferenceChangedEventArgs.cs
- Trigger.cs
- Point3DKeyFrameCollection.cs
- ImageAttributes.cs
- ValidationErrorEventArgs.cs
- FaultDescription.cs
- TreeNodeStyleCollection.cs
- ModifierKeysConverter.cs
- ByeOperation11AsyncResult.cs
- GridViewCommandEventArgs.cs
- WorkerRequest.cs
- InvalidBodyAccessException.cs
- WindowsTokenRoleProvider.cs
- DesignTimeParseData.cs
- CommandField.cs
- DataServiceBehavior.cs
- DataGrid.cs
- TypeConverterHelper.cs
- InputLanguageEventArgs.cs
- Polygon.cs
- DeploymentSection.cs
- StyleHelper.cs
- DbTransaction.cs
- ClipboardProcessor.cs
- XmlHierarchicalEnumerable.cs
- DefaultCommandConverter.cs
- RowUpdatingEventArgs.cs
- BooleanProjectedSlot.cs
- ToolboxControl.cs
- CopyCodeAction.cs
- MultipleViewPattern.cs
- AdornerPresentationContext.cs
- TextBox.cs
- SqlResolver.cs
- MediaScriptCommandRoutedEventArgs.cs
- SqlDependencyListener.cs
- AppSettingsReader.cs
- ImportContext.cs
- HorizontalAlignConverter.cs
- Span.cs
- WorkerRequest.cs
- PropertyValueUIItem.cs
- Activator.cs
- GridViewColumnHeader.cs
- ControlValuePropertyAttribute.cs
- ProviderBase.cs
- LifetimeServices.cs
- ReadOnlyCollection.cs
- HandleRef.cs
- DiscriminatorMap.cs
- XmlFormatExtensionAttribute.cs
- ParameterBuilder.cs
- DrawToolTipEventArgs.cs
- NavigatorInput.cs
- AdornerHitTestResult.cs
- XmlStringTable.cs
- EncryptedPackage.cs
- EventListenerClientSide.cs
- serverconfig.cs
- HttpResponseWrapper.cs
- TaskSchedulerException.cs
- RelationshipDetailsCollection.cs
- ApplicationSettingsBase.cs
- TextBounds.cs
- DataListItemEventArgs.cs
- SchemaImporterExtensionElementCollection.cs
- XmlSerializerVersionAttribute.cs
- MsdtcWrapper.cs
- dataprotectionpermissionattribute.cs
- OrderToken.cs
- LaxModeSecurityHeaderElementInferenceEngine.cs
- XmlQueryContext.cs
- CanExecuteRoutedEventArgs.cs
- ComNativeDescriptor.cs
- JumpList.cs
- LocalizationComments.cs
- ForeignKeyConstraint.cs
- ThumbAutomationPeer.cs
- MatrixAnimationUsingKeyFrames.cs
- ExceptionValidationRule.cs
- MarkupCompilePass1.cs
- MsmqIntegrationBindingElement.cs
- DefaultValueTypeConverter.cs
- PersonalizablePropertyEntry.cs
- XmlDomTextWriter.cs
- ContractListAdapter.cs
- MissingMethodException.cs
- PostBackOptions.cs