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
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XmlMtomWriter.cs
- IPPacketInformation.cs
- ListView.cs
- Rules.cs
- CodeIndexerExpression.cs
- ResourceIDHelper.cs
- DateTimeParse.cs
- SecureConversationVersion.cs
- SuppressMessageAttribute.cs
- CodeIdentifier.cs
- WebBrowserNavigatingEventHandler.cs
- DelayLoadType.cs
- SelectingProviderEventArgs.cs
- CollectionView.cs
- MergeFilterQuery.cs
- SqlProvider.cs
- ToolBarTray.cs
- Random.cs
- WinInet.cs
- PlatformNotSupportedException.cs
- PipeStream.cs
- AbsoluteQuery.cs
- WebPartCatalogAddVerb.cs
- DesignerObjectListAdapter.cs
- PerformanceCounterPermissionEntryCollection.cs
- MetadataConversionError.cs
- QuaternionRotation3D.cs
- RequestCache.cs
- OdbcParameter.cs
- Panel.cs
- FileCodeGroup.cs
- TextSpanModifier.cs
- CompositeScriptReferenceEventArgs.cs
- CustomExpressionEventArgs.cs
- WindowsStatusBar.cs
- XmlException.cs
- ClientScriptManager.cs
- IntegrationExceptionEventArgs.cs
- AnnotationAuthorChangedEventArgs.cs
- EmptyStringExpandableObjectConverter.cs
- UDPClient.cs
- BitmapEffectCollection.cs
- ContextQuery.cs
- ProfileManager.cs
- TdsParameterSetter.cs
- EntitySqlException.cs
- XmlNotation.cs
- Thickness.cs
- BitmapScalingModeValidation.cs
- EventWaitHandleSecurity.cs
- Ref.cs
- EditorOptionAttribute.cs
- UnsafeNativeMethodsTablet.cs
- SystemDiagnosticsSection.cs
- Aggregates.cs
- coordinatorfactory.cs
- StickyNote.cs
- PrincipalPermission.cs
- LinkLabelLinkClickedEvent.cs
- TreeBuilderXamlTranslator.cs
- WmlObjectListAdapter.cs
- DmlSqlGenerator.cs
- SafeProcessHandle.cs
- OpenTypeCommon.cs
- SQLInt16.cs
- PropertyDescriptorComparer.cs
- AudioException.cs
- AsyncResult.cs
- SpecularMaterial.cs
- GridEntry.cs
- PropertyInfoSet.cs
- BoundingRectTracker.cs
- XmlDataSourceNodeDescriptor.cs
- Comparer.cs
- TraceSection.cs
- MergeFailedEvent.cs
- BindableAttribute.cs
- NetworkCredential.cs
- WeakReadOnlyCollection.cs
- SingleConverter.cs
- DbDataRecord.cs
- UnsafeNativeMethods.cs
- DBConnection.cs
- FontFamilyValueSerializer.cs
- Int64AnimationUsingKeyFrames.cs
- TouchDevice.cs
- ListViewEditEventArgs.cs
- CurrentTimeZone.cs
- Byte.cs
- RelatedView.cs
- Soap12ProtocolImporter.cs
- AnimationException.cs
- WinInetCache.cs
- BinaryReader.cs
- BitmapEffectDrawingContextState.cs
- DocumentsTrace.cs
- OdbcEnvironmentHandle.cs
- PageThemeParser.cs
- Stack.cs
- RSAPKCS1KeyExchangeFormatter.cs