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
- InkCollectionBehavior.cs
- Int32Storage.cs
- ListItemViewControl.cs
- ConnectorRouter.cs
- BridgeDataReader.cs
- CrossSiteScriptingValidation.cs
- Main.cs
- ExpandSegmentCollection.cs
- StringReader.cs
- PathData.cs
- TagPrefixCollection.cs
- InlineObject.cs
- HttpDebugHandler.cs
- SqlParameter.cs
- DataRow.cs
- EntityDescriptor.cs
- CLSCompliantAttribute.cs
- DataTableTypeConverter.cs
- DataViewManager.cs
- FunctionDefinition.cs
- EncryptedType.cs
- ShellProvider.cs
- IRCollection.cs
- ModuleBuilderData.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- StylusPointPropertyUnit.cs
- ExpressionBindingCollection.cs
- SqlConnectionString.cs
- CompoundFileStreamReference.cs
- _ContextAwareResult.cs
- WebServiceErrorEvent.cs
- CapabilitiesUse.cs
- CodeGenerator.cs
- OleAutBinder.cs
- ParseHttpDate.cs
- TimelineClockCollection.cs
- SharedPersonalizationStateInfo.cs
- CodeDOMProvider.cs
- WebBrowserBase.cs
- SetUserPreferenceRequest.cs
- ImageListImage.cs
- List.cs
- DataServiceRequest.cs
- AudioDeviceOut.cs
- IsolatedStorageException.cs
- PersonalizationState.cs
- OracleBinary.cs
- XmlDocument.cs
- Content.cs
- CryptoHelper.cs
- OutOfProcStateClientManager.cs
- EntityTypeEmitter.cs
- SqlDataReader.cs
- MD5.cs
- URLMembershipCondition.cs
- WebChannelFactory.cs
- LayeredChannelFactory.cs
- PartialTrustVisibleAssembliesSection.cs
- StreamInfo.cs
- DetailsViewModeEventArgs.cs
- SqlDataSourceCommandEventArgs.cs
- ArcSegment.cs
- UserPersonalizationStateInfo.cs
- RankException.cs
- IntegerValidatorAttribute.cs
- TextDecorationCollection.cs
- Cursor.cs
- PtsCache.cs
- IntMinMaxAggregationOperator.cs
- ActivityExecutorSurrogate.cs
- PeerNameRecord.cs
- DiffuseMaterial.cs
- StateDesigner.LayoutSelectionGlyph.cs
- DynamicMetaObjectBinder.cs
- Cloud.cs
- LongValidatorAttribute.cs
- InstanceData.cs
- LogicalExpr.cs
- Rectangle.cs
- UnsafeNativeMethods.cs
- IndexerNameAttribute.cs
- AuthenticationModuleElement.cs
- GridViewAutoFormat.cs
- Operand.cs
- ResourceAttributes.cs
- SchemaEntity.cs
- TraceContext.cs
- EnumConverter.cs
- ToolStripDropDownMenu.cs
- PersonalizationAdministration.cs
- LinqDataSourceInsertEventArgs.cs
- MILUtilities.cs
- SystemParameters.cs
- StaticDataManager.cs
- addressfiltermode.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- PropertyInfo.cs
- WorkflowServiceNamespace.cs
- SystemTcpConnection.cs
- ObjectComplexPropertyMapping.cs