Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Map / Update / Internal / SourceInterpreter.cs / 1305376 / 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 ReadOnlyCollection GetAllStateEntries(PropagatorResult source, UpdateTranslator translator,
EntitySet sourceTable)
{
Debug.Assert(null != source);
Debug.Assert(null != translator);
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 (source.Identifier != PropagatorResult.NullIdentifier)
{
// state entries travel with identifiers. several state entries may be merged
// into a single identifier result via joins in the update mapping view
do
{
if (null != source.StateEntry)
{
m_stateEntries.Add(source.StateEntry);
if (source.Identifier != PropagatorResult.NullIdentifier)
{
// 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(source.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(source.Identifier))
{
m_stateEntries.Add(stateEntry);
}
}
}
source = source.Next;
}
while (null != source);
}
else 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, m_translator.MetadataWorkspace).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
- WebProxyScriptElement.cs
- UniqueSet.cs
- Function.cs
- DesignerVerb.cs
- XmlNamespaceManager.cs
- parserscommon.cs
- CompatibleIComparer.cs
- KeyValuePair.cs
- CompilerCollection.cs
- DomainUpDown.cs
- GraphicsPathIterator.cs
- XPathNodeInfoAtom.cs
- Pair.cs
- FixedSchema.cs
- WsdlParser.cs
- LinkedList.cs
- OlePropertyStructs.cs
- FileDetails.cs
- VirtualDirectoryMapping.cs
- MemoryStream.cs
- Asn1Utilities.cs
- SR.cs
- UiaCoreApi.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- WriteableOnDemandPackagePart.cs
- TableHeaderCell.cs
- ConfigurationValidatorAttribute.cs
- RijndaelManagedTransform.cs
- EmptyEnumerator.cs
- ResourceDictionary.cs
- SendingRequestEventArgs.cs
- XsltContext.cs
- ArglessEventHandlerProxy.cs
- localization.cs
- LongTypeConverter.cs
- WsdlBuildProvider.cs
- StaticExtension.cs
- IndentTextWriter.cs
- UniqueConstraint.cs
- BinHexEncoder.cs
- Converter.cs
- ExternalException.cs
- StrongNameUtility.cs
- Solver.cs
- SelectedGridItemChangedEvent.cs
- SecurityContext.cs
- AspNetSynchronizationContext.cs
- TabControlEvent.cs
- HttpClientCertificate.cs
- DbConnectionStringCommon.cs
- TableProviderWrapper.cs
- PerspectiveCamera.cs
- MobileResource.cs
- CharacterMetricsDictionary.cs
- TextLineBreak.cs
- DnsPermission.cs
- QueryReaderSettings.cs
- UnmanagedMarshal.cs
- PasswordPropertyTextAttribute.cs
- DesignerForm.cs
- M3DUtil.cs
- SiteOfOriginContainer.cs
- VectorCollectionConverter.cs
- SessionEndingEventArgs.cs
- SchemaTableColumn.cs
- TransactionBridgeSection.cs
- PermissionListSet.cs
- PartialCachingControl.cs
- XmlComplianceUtil.cs
- Sql8ConformanceChecker.cs
- ForAllOperator.cs
- SQLResource.cs
- followingsibling.cs
- BaseAddressPrefixFilterElement.cs
- DefaultParameterValueAttribute.cs
- OutputCacheSettingsSection.cs
- CultureTable.cs
- OAVariantLib.cs
- NativeMethods.cs
- CompiledWorkflowDefinitionContext.cs
- TableCellCollection.cs
- AssemblyResolver.cs
- KeyEvent.cs
- GeneralTransformGroup.cs
- WsatTransactionHeader.cs
- Enlistment.cs
- HttpCapabilitiesEvaluator.cs
- DoWorkEventArgs.cs
- SecurityCapabilities.cs
- ExtractCollection.cs
- DEREncoding.cs
- Serializer.cs
- SrgsDocument.cs
- StringSorter.cs
- TypedTableGenerator.cs
- ClientEventManager.cs
- IndentedWriter.cs
- ControlDesignerState.cs
- WindowAutomationPeer.cs
- AsyncOperation.cs