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
- ResourceDescriptionAttribute.cs
- AnimationTimeline.cs
- HtmlInputFile.cs
- GiveFeedbackEvent.cs
- VarInfo.cs
- CompilationUtil.cs
- XPathChildIterator.cs
- SqlConnectionHelper.cs
- EntityCodeGenerator.cs
- EntityContainerEmitter.cs
- EntityDescriptor.cs
- CodeDirectionExpression.cs
- PersonalizationEntry.cs
- TdsParameterSetter.cs
- ClientTargetSection.cs
- EnumType.cs
- NumberSubstitution.cs
- IPipelineRuntime.cs
- ProfileModule.cs
- TextSpanModifier.cs
- Image.cs
- GridViewAutomationPeer.cs
- InvalidCastException.cs
- EventPropertyMap.cs
- RtType.cs
- Sequence.cs
- Tag.cs
- EntityViewGenerationAttribute.cs
- BufferBuilder.cs
- DbConnectionStringBuilder.cs
- ToolStripSeparatorRenderEventArgs.cs
- SignedXml.cs
- CompModSwitches.cs
- ImageMap.cs
- ThreadStaticAttribute.cs
- SspiWrapper.cs
- ImageListUtils.cs
- DataListItem.cs
- TextEffectResolver.cs
- ReversePositionQuery.cs
- WizardPanel.cs
- MenuItem.cs
- CatalogZoneBase.cs
- SqlRemoveConstantOrderBy.cs
- DependencyPropertyKey.cs
- TextContainerHelper.cs
- WSDualHttpBindingElement.cs
- DetailsViewDeleteEventArgs.cs
- VectorCollectionConverter.cs
- AssemblyInfo.cs
- Crypto.cs
- PriorityItem.cs
- DataGridViewColumnCollection.cs
- TypeFieldSchema.cs
- RestHandlerFactory.cs
- TraceLog.cs
- Pair.cs
- ResXResourceReader.cs
- SendParametersContent.cs
- RenameRuleObjectDialog.cs
- ResizingMessageFilter.cs
- LineGeometry.cs
- GeometryGroup.cs
- SatelliteContractVersionAttribute.cs
- SplitterDesigner.cs
- ColumnMap.cs
- CollectionViewGroupInternal.cs
- SQLDateTime.cs
- ConsumerConnectionPointCollection.cs
- DataList.cs
- TypeConverterHelper.cs
- OpacityConverter.cs
- ParameterCollection.cs
- Ray3DHitTestResult.cs
- HyperlinkAutomationPeer.cs
- ColumnMap.cs
- ScopelessEnumAttribute.cs
- WebPartPersonalization.cs
- WebHttpBinding.cs
- ToolboxControl.cs
- WSFederationHttpSecurityMode.cs
- DesignerCatalogPartChrome.cs
- PreviewKeyDownEventArgs.cs
- CharEnumerator.cs
- infer.cs
- SettingsPropertyValue.cs
- ViewValidator.cs
- CqlLexerHelpers.cs
- XPathDocumentNavigator.cs
- XD.cs
- sqlser.cs
- DataControlLinkButton.cs
- PointKeyFrameCollection.cs
- OrderPreservingSpoolingTask.cs
- Rotation3DKeyFrameCollection.cs
- DependencyProperty.cs
- RSAProtectedConfigurationProvider.cs
- GraphicsContainer.cs
- ToolStripDropDownItem.cs
- DataGridColumnDropSeparator.cs