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
- RelationshipEndMember.cs
- IIS7WorkerRequest.cs
- SelectionEditingBehavior.cs
- WebHeaderCollection.cs
- _UriTypeConverter.cs
- PropertyNames.cs
- PageCache.cs
- X500Name.cs
- SchemaExporter.cs
- OutOfProcStateClientManager.cs
- WebServiceParameterData.cs
- DataGridViewCellStyleContentChangedEventArgs.cs
- SqlParameter.cs
- SchemaImporter.cs
- XmlBinaryWriterSession.cs
- ManipulationBoundaryFeedbackEventArgs.cs
- XmlLangPropertyAttribute.cs
- TableHeaderCell.cs
- RepeatInfo.cs
- GifBitmapDecoder.cs
- SHA384Cng.cs
- SpeakCompletedEventArgs.cs
- WeakReferenceList.cs
- Figure.cs
- ServiceElement.cs
- DataGridParentRows.cs
- HTTPNotFoundHandler.cs
- PasswordTextContainer.cs
- ModulesEntry.cs
- SHA256Managed.cs
- Compiler.cs
- HttpListener.cs
- VisualTreeUtils.cs
- Rectangle.cs
- SafeHandles.cs
- AppSecurityManager.cs
- IItemProperties.cs
- URLEditor.cs
- Qualifier.cs
- reliableinputsessionchannel.cs
- Facet.cs
- WebPartChrome.cs
- XpsFilter.cs
- WindowCollection.cs
- initElementDictionary.cs
- DiscoveryClientElement.cs
- SuppressedPackageProperties.cs
- JoinTreeSlot.cs
- TransformerInfo.cs
- ImageClickEventArgs.cs
- StrongNameHelpers.cs
- StructuralCache.cs
- SqlXmlStorage.cs
- FigureHelper.cs
- ControlEvent.cs
- XmlSchemaAny.cs
- DataSvcMapFileSerializer.cs
- TypeDelegator.cs
- FunctionImportMapping.ReturnTypeRenameMapping.cs
- _HeaderInfoTable.cs
- RepeatBehavior.cs
- KeyValuePair.cs
- wgx_render.cs
- SortDescription.cs
- ToolStripOverflowButton.cs
- ContentPosition.cs
- FocusWithinProperty.cs
- HwndSubclass.cs
- CommandLibraryHelper.cs
- FreezableOperations.cs
- Request.cs
- HtmlInputControl.cs
- Convert.cs
- XmlValueConverter.cs
- KerberosRequestorSecurityTokenAuthenticator.cs
- XsdBuilder.cs
- DataSourceCacheDurationConverter.cs
- JsonQueryStringConverter.cs
- OptionalRstParameters.cs
- FacetChecker.cs
- ServiceNameElement.cs
- ContextBase.cs
- WebPartMenuStyle.cs
- TableCellCollection.cs
- ArrangedElement.cs
- PackWebRequestFactory.cs
- TreeNode.cs
- Scripts.cs
- Type.cs
- QilGenerator.cs
- AssemblyNameProxy.cs
- AccessKeyManager.cs
- EntityContainer.cs
- ServicesUtilities.cs
- PolyBezierSegmentFigureLogic.cs
- SmtpMail.cs
- HttpPostedFileBase.cs
- FragmentQueryProcessor.cs
- UnsafeNativeMethods.cs
- CodeNamespace.cs