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
- XpsSerializationManagerAsync.cs
- DataObjectMethodAttribute.cs
- TypeGeneratedEventArgs.cs
- XPathExpr.cs
- XmlHelper.cs
- ImpersonateTokenRef.cs
- KoreanCalendar.cs
- InputLangChangeRequestEvent.cs
- Clipboard.cs
- OpenTypeLayoutCache.cs
- SafeProcessHandle.cs
- FormViewCommandEventArgs.cs
- HostProtectionException.cs
- RuntimeConfigurationRecord.cs
- SerializerWriterEventHandlers.cs
- DeferredReference.cs
- SQLCharsStorage.cs
- ProgressBarRenderer.cs
- XmlSchemaComplexType.cs
- MatrixKeyFrameCollection.cs
- CacheOutputQuery.cs
- HashCryptoHandle.cs
- VisualStyleRenderer.cs
- SyndicationSerializer.cs
- MessagePropertyDescriptionCollection.cs
- DynamicMetaObjectBinder.cs
- DataGridViewCellCollection.cs
- Context.cs
- PageDeviceFont.cs
- SiteMapNode.cs
- PageTheme.cs
- CachedFontFace.cs
- EntryPointNotFoundException.cs
- StreamResourceInfo.cs
- ParallelForEach.cs
- PropertyToken.cs
- HttpWrapper.cs
- OutputCacheSettingsSection.cs
- OracleCommandBuilder.cs
- ReferenceConverter.cs
- NullableConverter.cs
- SelectorItemAutomationPeer.cs
- Pair.cs
- TdsParserSessionPool.cs
- TraceSwitch.cs
- NavigationEventArgs.cs
- WeakEventManager.cs
- MultilineStringEditor.cs
- TraceUtility.cs
- VarRefManager.cs
- DbConnectionPoolCounters.cs
- EventLogPropertySelector.cs
- AssemblyBuilderData.cs
- TableRowCollection.cs
- WindowsStatic.cs
- ClrPerspective.cs
- SpecialFolderEnumConverter.cs
- SqlDataSource.cs
- SignatureResourcePool.cs
- LineMetrics.cs
- CodeDOMUtility.cs
- BlurBitmapEffect.cs
- CurrencyManager.cs
- XPathDescendantIterator.cs
- DataSourceHelper.cs
- ToolStripPanelRow.cs
- ControlValuePropertyAttribute.cs
- ControlCollection.cs
- DependencyProperty.cs
- RemoteWebConfigurationHost.cs
- SymLanguageType.cs
- CqlLexer.cs
- CurrencyManager.cs
- IDReferencePropertyAttribute.cs
- Encoder.cs
- SerializationException.cs
- SQLBytes.cs
- TypeSystemProvider.cs
- OverrideMode.cs
- AssociationSet.cs
- XmlQualifiedNameTest.cs
- PopupRoot.cs
- SmtpNetworkElement.cs
- Brushes.cs
- NativeMethods.cs
- DocumentCollection.cs
- PerformanceCounterCategory.cs
- ClientRequest.cs
- ClientConvert.cs
- CompatibleComparer.cs
- LockRecoveryTask.cs
- BindValidator.cs
- StringFunctions.cs
- IDataContractSurrogate.cs
- StringInfo.cs
- VisualSerializer.cs
- IIS7WorkerRequest.cs
- XmlWrappingReader.cs
- ListBindableAttribute.cs
- IxmlLineInfo.cs