Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Map / ViewGeneration / DiscriminatorMap.cs / 1305376 / DiscriminatorMap.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System.Data.Common.CommandTrees; using System.Data.Common.CommandTrees.Internal; using System.Collections.Generic; using System.Data.Metadata.Edm; using System.Linq; using System.Globalization; using System.Diagnostics; using System.Data.Common.Utils; namespace System.Data.Mapping.ViewGeneration { ////// Describes top-level query mapping view projection of the form: /// /// SELECT VALUE CASE /// WHEN Discriminator = DiscriminatorValue1 THEN EntityType1(...) /// WHEN Discriminator = DiscriminatorValue2 THEN EntityType2(...) /// ... /// /// Supports optimizing queries to leverage user supplied discriminator values /// in TPH mappings rather than introducing our own. This avoids the need /// to introduce a CASE statement in the store. /// internal class DiscriminatorMap { ////// Expression retrieving discriminator value from projection input. /// internal readonly DbPropertyExpression Discriminator; ////// Map from discriminator values to implied entity type. /// internal readonly System.Collections.ObjectModel.ReadOnlyCollection> TypeMap; /// /// Map from entity property to expression generating value for that property. Note that /// the expression must be the same for all types in discriminator map. /// internal readonly System.Collections.ObjectModel.ReadOnlyCollection> PropertyMap; /// /// Map from entity relproperty to expression generating value for that property. Note that /// the expression must be the same for all types in discriminator map. /// internal readonly System.Collections.ObjectModel.ReadOnlyCollection> RelPropertyMap; /// /// EntitySet to which the map applies. /// internal readonly EntitySet EntitySet; private DiscriminatorMap(DbPropertyExpression discriminator, List> typeMap, Dictionary propertyMap, Dictionary relPropertyMap, EntitySet entitySet) { this.Discriminator = discriminator; this.TypeMap = typeMap.AsReadOnly(); this.PropertyMap = propertyMap.ToList().AsReadOnly(); this.RelPropertyMap = relPropertyMap.ToList().AsReadOnly(); this.EntitySet = entitySet; } /// /// Determines whether the given query view matches the discriminator map pattern. /// internal static bool TryCreateDiscriminatorMap(EntitySet entitySet, DbExpression queryView, out DiscriminatorMap discriminatorMap) { discriminatorMap = null; if (queryView.ExpressionKind != DbExpressionKind.Project) { return false; } var project = (DbProjectExpression)queryView; if (project.Projection.ExpressionKind != DbExpressionKind.Case) { return false; } var caseExpression = (DbCaseExpression)project.Projection; if (project.Projection.ResultType.EdmType.BuiltInTypeKind != BuiltInTypeKind.EntityType) { return false; } // determine value domain by walking filter if (project.Input.Expression.ExpressionKind != DbExpressionKind.Filter) { return false; } var filterExpression = (DbFilterExpression)project.Input.Expression; HashSet
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- NegotiateStream.cs
- DocumentApplicationJournalEntry.cs
- DesignSurfaceManager.cs
- EventListenerClientSide.cs
- StaticExtension.cs
- Timeline.cs
- TransactionScopeDesigner.cs
- SendKeys.cs
- PropertyItem.cs
- DescriptionAttribute.cs
- DBConnection.cs
- WindowsStatic.cs
- CodeTypeParameter.cs
- GeneralTransform2DTo3DTo2D.cs
- VolatileResourceManager.cs
- FeatureAttribute.cs
- CodeTypeDelegate.cs
- LocalValueEnumerator.cs
- SatelliteContractVersionAttribute.cs
- RegisteredExpandoAttribute.cs
- SafeBuffer.cs
- TaiwanCalendar.cs
- XmlTextReaderImpl.cs
- HasActivatableWorkflowEvent.cs
- XmlSchemas.cs
- InstanceKeyNotReadyException.cs
- IPEndPoint.cs
- LinearGradientBrush.cs
- EdgeModeValidation.cs
- ContextProperty.cs
- ReflectEventDescriptor.cs
- ApplicationId.cs
- DocumentViewerBase.cs
- PeerDefaultCustomResolverClient.cs
- CodeIdentifiers.cs
- PropertyGridEditorPart.cs
- List.cs
- Rect3DConverter.cs
- EntityStoreSchemaGenerator.cs
- BindingCompleteEventArgs.cs
- HelpPage.cs
- DataControlPagerLinkButton.cs
- BatchStream.cs
- SmiEventStream.cs
- MetadataUtilsSmi.cs
- _HTTPDateParse.cs
- ObjectDataSourceDisposingEventArgs.cs
- DataObjectAttribute.cs
- ScriptReferenceBase.cs
- RegionInfo.cs
- MenuAutomationPeer.cs
- ToolStripControlHost.cs
- MobileListItem.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- Site.cs
- mda.cs
- SiteMapSection.cs
- CodeEntryPointMethod.cs
- BasicAsyncResult.cs
- FullTrustAssembly.cs
- DecoderReplacementFallback.cs
- ByteStreamGeometryContext.cs
- ServiceRouteHandler.cs
- Point4DConverter.cs
- WebPartDisplayModeCancelEventArgs.cs
- DynamicILGenerator.cs
- StopStoryboard.cs
- FirewallWrapper.cs
- BigInt.cs
- OracleString.cs
- UserControlParser.cs
- CommandID.cs
- FrameworkRichTextComposition.cs
- ObfuscationAttribute.cs
- XmlSerializerAssemblyAttribute.cs
- StyleCollectionEditor.cs
- ColorAnimationUsingKeyFrames.cs
- HTTPAPI_VERSION.cs
- ListItemConverter.cs
- PenThreadWorker.cs
- Nodes.cs
- LocalClientSecuritySettings.cs
- ThemeDictionaryExtension.cs
- IPAddress.cs
- GeneralTransformGroup.cs
- TextRange.cs
- NodeFunctions.cs
- SelectionEditingBehavior.cs
- CodePageUtils.cs
- ListCollectionView.cs
- RequestCachePolicyConverter.cs
- SystemIPInterfaceStatistics.cs
- SafeViewOfFileHandle.cs
- EventHandlerList.cs
- VisualProxy.cs
- FrameworkElementAutomationPeer.cs
- DataError.cs
- ConfigurationErrorsException.cs
- SqlUDTStorage.cs
- VariableModifiersHelper.cs