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
- HostExecutionContextManager.cs
- MultiAsyncResult.cs
- HTMLTagNameToTypeMapper.cs
- Attributes.cs
- HtmlTitle.cs
- ExpressionWriter.cs
- Point3DCollection.cs
- Italic.cs
- COM2Enum.cs
- TaiwanLunisolarCalendar.cs
- CommandEventArgs.cs
- DataGridViewRowErrorTextNeededEventArgs.cs
- DataControlImageButton.cs
- PassportPrincipal.cs
- JsonReaderDelegator.cs
- Socket.cs
- OLEDB_Util.cs
- GridItemProviderWrapper.cs
- SspiHelper.cs
- NonDualMessageSecurityOverHttp.cs
- TextBlockAutomationPeer.cs
- FormViewModeEventArgs.cs
- SystemResources.cs
- XAMLParseException.cs
- XMLUtil.cs
- TemplateContainer.cs
- StrokeNodeEnumerator.cs
- RenderData.cs
- SqlConnectionStringBuilder.cs
- Cell.cs
- SafeArrayTypeMismatchException.cs
- WorkflowInlining.cs
- ProgressBar.cs
- HighlightComponent.cs
- TagPrefixAttribute.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- DefaultSection.cs
- DelimitedListTraceListener.cs
- MenuItem.cs
- Clause.cs
- ServiceDebugBehavior.cs
- StaticFileHandler.cs
- XmlLanguageConverter.cs
- EventArgs.cs
- XhtmlBasicPhoneCallAdapter.cs
- FtpWebResponse.cs
- HttpCachePolicy.cs
- StringCollection.cs
- LoginName.cs
- XmlTextAttribute.cs
- LogLogRecord.cs
- FilteredReadOnlyMetadataCollection.cs
- Exceptions.cs
- StructuredProperty.cs
- SafeNativeMethods.cs
- FormsAuthenticationUserCollection.cs
- DbSource.cs
- DecimalConverter.cs
- ChangeProcessor.cs
- CompilerError.cs
- WindowsListViewGroupHelper.cs
- PreparingEnlistment.cs
- RunInstallerAttribute.cs
- SchemaCreator.cs
- DataTemplateSelector.cs
- Decoder.cs
- InstanceDescriptor.cs
- TypeUsageBuilder.cs
- ConnectionPoint.cs
- MultipleViewPattern.cs
- SqlInfoMessageEvent.cs
- BaseConfigurationRecord.cs
- SecurityContextCookieSerializer.cs
- DispatcherExceptionEventArgs.cs
- WrappedReader.cs
- DoubleUtil.cs
- DataServiceRequestException.cs
- HtmlSelect.cs
- Missing.cs
- RepeaterItemEventArgs.cs
- WinFormsSpinner.cs
- SplineKeyFrames.cs
- TileBrush.cs
- RegistryConfigurationProvider.cs
- PropertySegmentSerializer.cs
- MulticastNotSupportedException.cs
- Privilege.cs
- PersonalizationProviderCollection.cs
- SmtpSection.cs
- securitycriticaldataformultiplegetandset.cs
- ComponentSerializationService.cs
- HebrewNumber.cs
- ItemsPanelTemplate.cs
- StickyNote.cs
- BindingGroup.cs
- MouseActionConverter.cs
- VariableDesigner.xaml.cs
- SHA512Managed.cs
- DependencyPropertyHelper.cs
- CounterSample.cs