Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataWebControls / System / Data / WebControls / EntityDataSourceReferenceGroup.cs / 2 / 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; 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; } } 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(IEntityWithRelationships entity); } internal class EntityDataSourceReferenceGroup : EntityDataSourceReferenceGroup where T : class, IEntityWithRelationships { public EntityDataSourceReferenceGroup(AssociationSetEnd end) : base(end) { } internal override void SetKeyValues(EntityDataSourceWrapper wrapper, Dictionary newKeyValues) { EntityDataSourceUtil.CheckArgumentNull(wrapper, "wrapper"); EntityReference reference = GetRelatedReference((IEntityWithRelationships)wrapper.WrappedEntity); 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(IEntityWithRelationships entity) { EntityKey key = GetRelatedReference(entity).EntityKey; return key; } private EntityReference GetRelatedReference(IEntityWithRelationships entity) { EntityReference reference = entity.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; 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; } } 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(IEntityWithRelationships entity); } internal class EntityDataSourceReferenceGroup : EntityDataSourceReferenceGroup where T : class, IEntityWithRelationships { public EntityDataSourceReferenceGroup(AssociationSetEnd end) : base(end) { } internal override void SetKeyValues(EntityDataSourceWrapper wrapper, Dictionary newKeyValues) { EntityDataSourceUtil.CheckArgumentNull(wrapper, "wrapper"); EntityReference reference = GetRelatedReference((IEntityWithRelationships)wrapper.WrappedEntity); 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(IEntityWithRelationships entity) { EntityKey key = GetRelatedReference(entity).EntityKey; return key; } private EntityReference GetRelatedReference(IEntityWithRelationships entity) { EntityReference reference = entity.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
- WinFormsComponentEditor.cs
- MaskedTextBoxDesigner.cs
- XmlnsCompatibleWithAttribute.cs
- EllipseGeometry.cs
- SoundPlayerAction.cs
- MessageQueueCriteria.cs
- SqlBulkCopy.cs
- ProjectionPlan.cs
- WebPartTracker.cs
- UpdatePanel.cs
- SerializationEventsCache.cs
- DataBoundControlHelper.cs
- JapaneseCalendar.cs
- AddInControllerImpl.cs
- RichTextBox.cs
- NestedContainer.cs
- SequenceDesignerAccessibleObject.cs
- ZoneMembershipCondition.cs
- UnauthorizedAccessException.cs
- PinProtectionHelper.cs
- XPathItem.cs
- InputScopeConverter.cs
- XmlSerializerNamespaces.cs
- WebPartsSection.cs
- EmptyCollection.cs
- JsonXmlDataContract.cs
- XmlCompatibilityReader.cs
- GeometryGroup.cs
- CodeCompiler.cs
- QueryLifecycle.cs
- CellIdBoolean.cs
- WebPartMovingEventArgs.cs
- FormClosingEvent.cs
- TraceXPathNavigator.cs
- GridPattern.cs
- ButtonChrome.cs
- XmlHierarchicalEnumerable.cs
- EntitySqlException.cs
- KeyboardInputProviderAcquireFocusEventArgs.cs
- ParserContext.cs
- HwndMouseInputProvider.cs
- DependencyProperty.cs
- PenLineCapValidation.cs
- EmptyCollection.cs
- XmlSchemaSet.cs
- MachineKeyConverter.cs
- FactoryMaker.cs
- SendingRequestEventArgs.cs
- XmlNavigatorStack.cs
- RichTextBoxAutomationPeer.cs
- ClientRolePrincipal.cs
- ProtocolsConfigurationEntry.cs
- DataGridItem.cs
- COSERVERINFO.cs
- ScriptServiceAttribute.cs
- DbConnectionPoolGroupProviderInfo.cs
- XmlElementAttribute.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- GradientBrush.cs
- RemoteWebConfigurationHostServer.cs
- PointValueSerializer.cs
- WorkflowEventArgs.cs
- WSTrust.cs
- Ray3DHitTestResult.cs
- CompositeActivityValidator.cs
- VerificationAttribute.cs
- NetStream.cs
- Ops.cs
- RuleDefinitions.cs
- _SingleItemRequestCache.cs
- FixedDocumentSequencePaginator.cs
- DbConnectionInternal.cs
- WasAdminWrapper.cs
- Point4D.cs
- GifBitmapDecoder.cs
- GuidTagList.cs
- HttpValueCollection.cs
- UseAttributeSetsAction.cs
- PerformanceCounterScope.cs
- FramingDecoders.cs
- DateTimeFormatInfo.cs
- QilExpression.cs
- ITextView.cs
- CompositeFontFamily.cs
- Publisher.cs
- WorkflowDesignerMessageFilter.cs
- PriorityBinding.cs
- ColorTransformHelper.cs
- CompositeDesignerAccessibleObject.cs
- SmtpReplyReaderFactory.cs
- FileEnumerator.cs
- OrderedDictionary.cs
- DynamicPropertyReader.cs
- WebHttpSecurity.cs
- JapaneseCalendar.cs
- XmlFileEditor.cs
- ProgressBarRenderer.cs
- IssuedTokenClientBehaviorsElement.cs
- ConnectionStringsExpressionBuilder.cs
- KeyedHashAlgorithm.cs