Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataEntity / System / Data / Map / Update / Internal / SourceInterpreter.cs / 1 / SourceInterpreter.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Data.Objects; using System.Data.Metadata.Edm; namespace System.Data.Mapping.Update.Internal { ////// This class determines the state entries contributing to an expression /// propagated through an update mapping view (values in propagated expressions /// remember where they come from) /// internal class SourceInterpreter { private SourceInterpreter(UpdateTranslator translator, EntitySet sourceTable) { m_stateEntries = new List(); m_translator = translator; m_sourceTable = sourceTable; } private readonly List m_stateEntries; private readonly UpdateTranslator m_translator; private readonly EntitySet m_sourceTable; /// /// Finds all markup associated with the given source. /// /// Source expression. Must not be null. /// Translator containing session information. /// Table from which the exception was thrown (must not be null). ///Markup. internal static ReadOnlyCollectionGetAllStateEntries(PropagatorResult source, UpdateTranslator translator, EntitySet sourceTable) { Debug.Assert(null != source); Debug.Assert(null != sourceTable); SourceInterpreter interpreter = new SourceInterpreter(translator, sourceTable); interpreter.RetrieveResultMarkup(source); return new ReadOnlyCollection (interpreter.m_stateEntries); } private void RetrieveResultMarkup(PropagatorResult source) { Debug.Assert(null != source); if (null != source.StateEntry) { m_stateEntries.Add(source.StateEntry); } long identifier = source.Identifier; if (PropagatorResult.NullIdentifier != identifier) { // if this is an identifier, it may also be registered with an "owner". // Return the owner as well if the owner is also mapped to this table. PropagatorResult owner; if (m_translator.KeyManager.TryGetIdentifierOwner(identifier, out owner) && null != owner.StateEntry && ExtentInScope(owner.StateEntry.EntitySet)) { m_stateEntries.Add(owner.StateEntry); } // Check if are any referential constraints. If so, the entity key // implies that the dependent relationship instance is also being // handled in this result. foreach (IEntityStateEntry stateEntry in m_translator.KeyManager.GetDependentStateEntries(identifier)) { m_stateEntries.Add(stateEntry); } } if (!source.IsSimple && !source.IsNull) { // walk children foreach (PropagatorResult child in source.GetMemberValues()) { RetrieveResultMarkup(child); } } } // Determines whether the given table is in scope for the current source: if the source // table does not map to the source table for this interpreter, it is not in scope // for exceptions thrown from this table. private bool ExtentInScope(EntitySetBase extent) { if (null == extent) { return false; } // determine if the extent is mapped to this table return m_translator.ViewLoader.GetAffectedTables(extent).Contains(m_sourceTable); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Data.Objects; using System.Data.Metadata.Edm; namespace System.Data.Mapping.Update.Internal { ////// This class determines the state entries contributing to an expression /// propagated through an update mapping view (values in propagated expressions /// remember where they come from) /// internal class SourceInterpreter { private SourceInterpreter(UpdateTranslator translator, EntitySet sourceTable) { m_stateEntries = new List(); m_translator = translator; m_sourceTable = sourceTable; } private readonly List m_stateEntries; private readonly UpdateTranslator m_translator; private readonly EntitySet m_sourceTable; /// /// Finds all markup associated with the given source. /// /// Source expression. Must not be null. /// Translator containing session information. /// Table from which the exception was thrown (must not be null). ///Markup. internal static ReadOnlyCollectionGetAllStateEntries(PropagatorResult source, UpdateTranslator translator, EntitySet sourceTable) { Debug.Assert(null != source); Debug.Assert(null != sourceTable); SourceInterpreter interpreter = new SourceInterpreter(translator, sourceTable); interpreter.RetrieveResultMarkup(source); return new ReadOnlyCollection (interpreter.m_stateEntries); } private void RetrieveResultMarkup(PropagatorResult source) { Debug.Assert(null != source); if (null != source.StateEntry) { m_stateEntries.Add(source.StateEntry); } long identifier = source.Identifier; if (PropagatorResult.NullIdentifier != identifier) { // if this is an identifier, it may also be registered with an "owner". // Return the owner as well if the owner is also mapped to this table. PropagatorResult owner; if (m_translator.KeyManager.TryGetIdentifierOwner(identifier, out owner) && null != owner.StateEntry && ExtentInScope(owner.StateEntry.EntitySet)) { m_stateEntries.Add(owner.StateEntry); } // Check if are any referential constraints. If so, the entity key // implies that the dependent relationship instance is also being // handled in this result. foreach (IEntityStateEntry stateEntry in m_translator.KeyManager.GetDependentStateEntries(identifier)) { m_stateEntries.Add(stateEntry); } } if (!source.IsSimple && !source.IsNull) { // walk children foreach (PropagatorResult child in source.GetMemberValues()) { RetrieveResultMarkup(child); } } } // Determines whether the given table is in scope for the current source: if the source // table does not map to the source table for this interpreter, it is not in scope // for exceptions thrown from this table. private bool ExtentInScope(EntitySetBase extent) { if (null == extent) { return false; } // determine if the extent is mapped to this table return m_translator.ViewLoader.GetAffectedTables(extent).Contains(m_sourceTable); } } } // 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
- KoreanCalendar.cs
- HtmlInputPassword.cs
- Win32MouseDevice.cs
- Baml2006ReaderContext.cs
- XmlIlVisitor.cs
- Selector.cs
- FlowDocumentPage.cs
- ProxyGenerationError.cs
- Certificate.cs
- NavigationHelper.cs
- ScrollChrome.cs
- SqlTransaction.cs
- QuaternionAnimationUsingKeyFrames.cs
- StateItem.cs
- DataSourceCollectionBase.cs
- TypeBrowser.xaml.cs
- SynchronizationFilter.cs
- Pair.cs
- ArrangedElementCollection.cs
- MultipleViewProviderWrapper.cs
- PerformanceCounters.cs
- AssemblyAssociatedContentFileAttribute.cs
- printdlgexmarshaler.cs
- XmlSchemaParticle.cs
- PackageProperties.cs
- FileDocument.cs
- SystemWebCachingSectionGroup.cs
- CodeChecksumPragma.cs
- PerformanceCounter.cs
- ResourceManagerWrapper.cs
- Interlocked.cs
- CompositeActivityTypeDescriptorProvider.cs
- WebPartCatalogAddVerb.cs
- BmpBitmapEncoder.cs
- SecureUICommand.cs
- ObjectDataSourceMethodEventArgs.cs
- XDeferredAxisSource.cs
- GetPageCompletedEventArgs.cs
- MetadataFile.cs
- DataGridViewSelectedCellCollection.cs
- AppDomainAttributes.cs
- SmiXetterAccessMap.cs
- HttpHandler.cs
- EncoderNLS.cs
- SqlRowUpdatingEvent.cs
- TreeNodeCollection.cs
- StandardBindingElementCollection.cs
- FormsAuthenticationModule.cs
- ProxyWebPartManager.cs
- PeerNodeTraceRecord.cs
- BackStopAuthenticationModule.cs
- ListViewDeleteEventArgs.cs
- UpdateCompiler.cs
- EntityObject.cs
- TextEditorCopyPaste.cs
- EntryPointNotFoundException.cs
- HttpFileCollection.cs
- TextTreeExtractElementUndoUnit.cs
- HTTP_SERVICE_CONFIG_URLACL_KEY.cs
- ReferentialConstraint.cs
- AmbientLight.cs
- UriScheme.cs
- FullTextLine.cs
- RectKeyFrameCollection.cs
- File.cs
- ListViewUpdatedEventArgs.cs
- SecurityPolicyVersion.cs
- _TimerThread.cs
- NullableBoolConverter.cs
- WebPartTransformer.cs
- ApplyTemplatesAction.cs
- CancelEventArgs.cs
- XmlSchemaExternal.cs
- CreateRefExpr.cs
- WizardStepBase.cs
- TextReader.cs
- ToolStripProgressBar.cs
- DesignBindingConverter.cs
- OdbcConnectionPoolProviderInfo.cs
- InkSerializer.cs
- CompositeCollectionView.cs
- XamlTypeMapper.cs
- Trigger.cs
- StorageEntityContainerMapping.cs
- EncryptedPackageFilter.cs
- HtmlInputReset.cs
- TemplateFactory.cs
- LifetimeServices.cs
- AsyncSerializedWorker.cs
- InkSerializer.cs
- SelfIssuedAuthRSAPKCS1SignatureFormatter.cs
- OutOfProcStateClientManager.cs
- precedingsibling.cs
- DataContractSerializerSection.cs
- UIElement3D.cs
- GroupItem.cs
- AnonymousIdentificationSection.cs
- RowToParametersTransformer.cs
- ProviderCollection.cs
- GPRECTF.cs