Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataWebControls / System / Data / WebControls / EntityDataSourceReferenceGroup.cs / 1 / 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
- Point3DAnimation.cs
- ToolstripProfessionalRenderer.cs
- MenuCommand.cs
- ComPlusTraceRecord.cs
- ProcessingInstructionAction.cs
- IsolatedStorage.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- JoinSymbol.cs
- RawUIStateInputReport.cs
- PngBitmapEncoder.cs
- SafeBitVector32.cs
- XmlExpressionDumper.cs
- DataBoundControlAdapter.cs
- SqlRetyper.cs
- GridViewSortEventArgs.cs
- MulticastNotSupportedException.cs
- DesignerActionUIService.cs
- ReferencedAssembly.cs
- Pkcs7Signer.cs
- OleAutBinder.cs
- FilterException.cs
- SamlSubject.cs
- Brush.cs
- IndexOutOfRangeException.cs
- Composition.cs
- SQLBinary.cs
- TextEndOfParagraph.cs
- ToolStripContentPanel.cs
- RegistrySecurity.cs
- PhoneCallDesigner.cs
- FormatSettings.cs
- SafeNativeMethods.cs
- TimelineGroup.cs
- DataGridViewCellEventArgs.cs
- TextServicesProperty.cs
- IndexOutOfRangeException.cs
- ColorMap.cs
- XPathSelfQuery.cs
- ProgressBarRenderer.cs
- ContainerSelectorBehavior.cs
- WeakEventManager.cs
- Int16KeyFrameCollection.cs
- WebBrowserDocumentCompletedEventHandler.cs
- GeneralTransformCollection.cs
- CustomBindingCollectionElement.cs
- TimeSpanOrInfiniteValidator.cs
- DefaultPropertyAttribute.cs
- DataObjectAttribute.cs
- ScrollViewerAutomationPeer.cs
- ETagAttribute.cs
- Unit.cs
- Math.cs
- ElementsClipboardData.cs
- CfgParser.cs
- DrawListViewSubItemEventArgs.cs
- Floater.cs
- OleDbConnectionInternal.cs
- BroadcastEventHelper.cs
- SortedList.cs
- TranslateTransform.cs
- FrameDimension.cs
- ImageAnimator.cs
- WindowExtensionMethods.cs
- InkCanvas.cs
- LicenseException.cs
- KeyedHashAlgorithm.cs
- LinkConverter.cs
- SourceSwitch.cs
- LinearKeyFrames.cs
- ObjectViewFactory.cs
- StylusPointPropertyInfo.cs
- DataGridTable.cs
- AutoGeneratedFieldProperties.cs
- PropertyMapper.cs
- ApplicationHost.cs
- IList.cs
- XPathNodeList.cs
- versioninfo.cs
- ScrollEventArgs.cs
- CacheAxisQuery.cs
- LongValidator.cs
- BufferBuilder.cs
- FillErrorEventArgs.cs
- SqlTypesSchemaImporter.cs
- ChangeDirector.cs
- _ConnectOverlappedAsyncResult.cs
- XmlILOptimizerVisitor.cs
- HttpRawResponse.cs
- ByteFacetDescriptionElement.cs
- MemberHolder.cs
- CompoundFileStreamReference.cs
- MetadataArtifactLoaderCompositeResource.cs
- NamespaceDecl.cs
- SortedDictionary.cs
- WSDualHttpBindingElement.cs
- UInt16Converter.cs
- CacheChildrenQuery.cs
- IdentityReference.cs
- OdbcParameterCollection.cs
- GestureRecognizer.cs