Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- ErrorStyle.cs
- WindowsTab.cs
- ExpressionTextBox.xaml.cs
- AuthorizationRule.cs
- Emitter.cs
- CommonServiceBehaviorElement.cs
- Predicate.cs
- TypeReference.cs
- SaveFileDialog.cs
- WindowsPrincipal.cs
- SamlSubjectStatement.cs
- DataObjectSettingDataEventArgs.cs
- DiscoveryClientChannelBase.cs
- SpotLight.cs
- PrintingPermission.cs
- ComponentChangingEvent.cs
- RuleEngine.cs
- SecurityCookieModeValidator.cs
- ScrollableControl.cs
- SplitterCancelEvent.cs
- CodeCatchClauseCollection.cs
- TriggerAction.cs
- DllNotFoundException.cs
- RayMeshGeometry3DHitTestResult.cs
- URLIdentityPermission.cs
- SmtpFailedRecipientsException.cs
- Command.cs
- Blend.cs
- Line.cs
- FloatSumAggregationOperator.cs
- PropertyGroupDescription.cs
- Dynamic.cs
- NativeRecognizer.cs
- CounterSample.cs
- XmlFileEditor.cs
- __TransparentProxy.cs
- FontUnit.cs
- TableColumn.cs
- CorrelationToken.cs
- SecurityImpersonationBehavior.cs
- QilReplaceVisitor.cs
- ReadOnlyHierarchicalDataSource.cs
- LicFileLicenseProvider.cs
- EventMap.cs
- FixedTextView.cs
- HuffCodec.cs
- MediaPlayerState.cs
- DataStorage.cs
- BypassElement.cs
- DetailsViewPageEventArgs.cs
- FillRuleValidation.cs
- ModelUIElement3D.cs
- IgnoreFileBuildProvider.cs
- FormViewPageEventArgs.cs
- DES.cs
- ContourSegment.cs
- LocalizabilityAttribute.cs
- SafeNativeMethodsOther.cs
- Parser.cs
- TemplatedMailWebEventProvider.cs
- ActivityDesignerAccessibleObject.cs
- CodeGotoStatement.cs
- DataGridViewImageCell.cs
- DataGridViewAutoSizeModeEventArgs.cs
- XmlnsCache.cs
- PolyBezierSegment.cs
- MarkupExtensionParser.cs
- JournalEntryStack.cs
- OptimizedTemplateContentHelper.cs
- ListControlConvertEventArgs.cs
- IDispatchConstantAttribute.cs
- UserControlBuildProvider.cs
- RegexCompilationInfo.cs
- xmlsaver.cs
- DbConnectionPool.cs
- SignerInfo.cs
- SoapHeader.cs
- TableRow.cs
- WmlLiteralTextAdapter.cs
- InstanceDataCollection.cs
- AsyncOperationManager.cs
- NamedPipeTransportManager.cs
- TailCallAnalyzer.cs
- EraserBehavior.cs
- PersistenceTypeAttribute.cs
- DPCustomTypeDescriptor.cs
- HtmlTableCellCollection.cs
- CharacterString.cs
- GeometryHitTestResult.cs
- InternalRelationshipCollection.cs
- ZoomPercentageConverter.cs
- ExpressionContext.cs
- ConfigXmlText.cs
- PermissionListSet.cs
- ToolStripContentPanelRenderEventArgs.cs
- HtmlSelect.cs
- OrderByQueryOptionExpression.cs
- embossbitmapeffect.cs
- CodeIndexerExpression.cs
- HtmlInputSubmit.cs