Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataEntity / System / Data / Common / QueryCache / EntityClientCacheKey.cs / 3 / EntityClientCacheKey.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....], [....] //----------------------------------------------------------------------------- namespace System.Data.Common.QueryCache { using System; using System.Collections.Generic; using System.Text; using System.Data.EntityClient; using System.Globalization; using System.Diagnostics; using System.Data.Metadata.Edm; ////// Represents EntityCommand Cache key context /// internal sealed class EntityClientCacheKey : QueryCacheKey { ////// Stored procedure or command text? /// readonly CommandType _commandType; ////// Entity Sql statement /// readonly string _eSqlStatement; ////// parameter collection token /// readonly string _parametersToken; ////// number of parameters /// readonly int _parameterCount; ////// Combined Hashcode based on component hashcodes /// readonly int _hashCode; ////// Creates a new instance of EntityClientCacheKey given a entityCommand instance /// /// internal EntityClientCacheKey(EntityCommand entityCommand) : base() { // Command Type _commandType = entityCommand.CommandType; // Statement _eSqlStatement = entityCommand.CommandText; // Parameters _parametersToken = GetParametersToken(entityCommand); _parameterCount = entityCommand.Parameters.Count; // Hashcode _hashCode = _commandType.GetHashCode() ^ _eSqlStatement.GetHashCode() ^ _parametersToken.GetHashCode(); } ////// determines equality of two cache keys based on cache context values /// /// ///public override bool Equals( object otherObject ) { Debug.Assert(null != otherObject, "otherObject must not be null"); if (typeof(EntityClientCacheKey) != otherObject.GetType()) { return false; } EntityClientCacheKey otherEntityClientCacheKey = (EntityClientCacheKey)otherObject; return (_commandType == otherEntityClientCacheKey._commandType && _parameterCount == otherEntityClientCacheKey._parameterCount) && Equals(otherEntityClientCacheKey._eSqlStatement, _eSqlStatement) && Equals(otherEntityClientCacheKey._parametersToken, _parametersToken); } /// /// Returns Context Hash Code /// ///public override int GetHashCode() { return _hashCode; } /// /// Returns a string representation of the parameter list /// /// ///private static string GetParametersToken(EntityCommand entityCommand) { if (null == entityCommand.Parameters || 0 == entityCommand.Parameters.Count) { // // means no parameters // return "@@0"; } else if (1 == entityCommand.Parameters.Count) { // if its one parameter only, there is no need to use stringbuilder Dictionary paramTypeUsage = entityCommand.GetParameterTypeUsage(); Debug.Assert(paramTypeUsage.Count == entityCommand.Parameters.Count, "entityParameter collection and query parameter collection must have the same number of entries"); return "@@1:" + entityCommand.Parameters[0].ParameterName + ":" + paramTypeUsage[entityCommand.Parameters[0].ParameterName].EdmType.FullName; } else { StringBuilder sb = new StringBuilder(entityCommand.Parameters.Count * EstimatedParameterStringSize); Dictionary paramTypeUsage = entityCommand.GetParameterTypeUsage(); Debug.Assert(paramTypeUsage.Count == entityCommand.Parameters.Count, "entityParameter collection and query parameter collection must have the same number of entries"); sb.Append("@@"); sb.Append(entityCommand.Parameters.Count); sb.Append(":"); string separator = ""; foreach (KeyValuePair param in paramTypeUsage) { sb.Append(separator); sb.Append(param.Key); sb.Append(":"); sb.Append(param.Value.EdmType.FullName); separator = ";"; } return sb.ToString(); } } /// /// returns the composed cache key /// ///public override string ToString() { return String.Join("|", new string[] { Enum.GetName(typeof(CommandType), _commandType), _eSqlStatement, _parametersToken }); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....], [....] //----------------------------------------------------------------------------- namespace System.Data.Common.QueryCache { using System; using System.Collections.Generic; using System.Text; using System.Data.EntityClient; using System.Globalization; using System.Diagnostics; using System.Data.Metadata.Edm; ////// Represents EntityCommand Cache key context /// internal sealed class EntityClientCacheKey : QueryCacheKey { ////// Stored procedure or command text? /// readonly CommandType _commandType; ////// Entity Sql statement /// readonly string _eSqlStatement; ////// parameter collection token /// readonly string _parametersToken; ////// number of parameters /// readonly int _parameterCount; ////// Combined Hashcode based on component hashcodes /// readonly int _hashCode; ////// Creates a new instance of EntityClientCacheKey given a entityCommand instance /// /// internal EntityClientCacheKey(EntityCommand entityCommand) : base() { // Command Type _commandType = entityCommand.CommandType; // Statement _eSqlStatement = entityCommand.CommandText; // Parameters _parametersToken = GetParametersToken(entityCommand); _parameterCount = entityCommand.Parameters.Count; // Hashcode _hashCode = _commandType.GetHashCode() ^ _eSqlStatement.GetHashCode() ^ _parametersToken.GetHashCode(); } ////// determines equality of two cache keys based on cache context values /// /// ///public override bool Equals( object otherObject ) { Debug.Assert(null != otherObject, "otherObject must not be null"); if (typeof(EntityClientCacheKey) != otherObject.GetType()) { return false; } EntityClientCacheKey otherEntityClientCacheKey = (EntityClientCacheKey)otherObject; return (_commandType == otherEntityClientCacheKey._commandType && _parameterCount == otherEntityClientCacheKey._parameterCount) && Equals(otherEntityClientCacheKey._eSqlStatement, _eSqlStatement) && Equals(otherEntityClientCacheKey._parametersToken, _parametersToken); } /// /// Returns Context Hash Code /// ///public override int GetHashCode() { return _hashCode; } /// /// Returns a string representation of the parameter list /// /// ///private static string GetParametersToken(EntityCommand entityCommand) { if (null == entityCommand.Parameters || 0 == entityCommand.Parameters.Count) { // // means no parameters // return "@@0"; } else if (1 == entityCommand.Parameters.Count) { // if its one parameter only, there is no need to use stringbuilder Dictionary paramTypeUsage = entityCommand.GetParameterTypeUsage(); Debug.Assert(paramTypeUsage.Count == entityCommand.Parameters.Count, "entityParameter collection and query parameter collection must have the same number of entries"); return "@@1:" + entityCommand.Parameters[0].ParameterName + ":" + paramTypeUsage[entityCommand.Parameters[0].ParameterName].EdmType.FullName; } else { StringBuilder sb = new StringBuilder(entityCommand.Parameters.Count * EstimatedParameterStringSize); Dictionary paramTypeUsage = entityCommand.GetParameterTypeUsage(); Debug.Assert(paramTypeUsage.Count == entityCommand.Parameters.Count, "entityParameter collection and query parameter collection must have the same number of entries"); sb.Append("@@"); sb.Append(entityCommand.Parameters.Count); sb.Append(":"); string separator = ""; foreach (KeyValuePair param in paramTypeUsage) { sb.Append(separator); sb.Append(param.Key); sb.Append(":"); sb.Append(param.Value.EdmType.FullName); separator = ";"; } return sb.ToString(); } } /// /// returns the composed cache key /// ///public override string ToString() { return String.Join("|", new string[] { Enum.GetName(typeof(CommandType), _commandType), _eSqlStatement, _parametersToken }); } } } // 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
- EventRoute.cs
- DbException.cs
- NamedPipeTransportElement.cs
- PartialCachingControl.cs
- CodeChecksumPragma.cs
- _NetworkingPerfCounters.cs
- MarkupCompilePass1.cs
- LogReservationCollection.cs
- WebPartConnectionsDisconnectVerb.cs
- PhysicalAddress.cs
- ImageCollectionEditor.cs
- DataBinder.cs
- EnumBuilder.cs
- ObjectListComponentEditor.cs
- DictionarySectionHandler.cs
- JpegBitmapEncoder.cs
- IISMapPath.cs
- WebPartMinimizeVerb.cs
- ConditionBrowserDialog.cs
- DeploymentSectionCache.cs
- PageAdapter.cs
- WSSecureConversationFeb2005.cs
- ContentControl.cs
- NativeRecognizer.cs
- RoutingService.cs
- TreeView.cs
- TextEditor.cs
- MetadataPropertyAttribute.cs
- AsyncOperationManager.cs
- DataGridViewRowEventArgs.cs
- ConvertTextFrag.cs
- SqlUnionizer.cs
- ExclusiveTcpTransportManager.cs
- CryptoKeySecurity.cs
- Vector3D.cs
- GeometryValueSerializer.cs
- ClipboardProcessor.cs
- DesignOnlyAttribute.cs
- CodeSnippetCompileUnit.cs
- TypeUsageBuilder.cs
- SplitterEvent.cs
- ComponentDispatcher.cs
- DataView.cs
- FtpWebResponse.cs
- ToolboxComponentsCreatingEventArgs.cs
- userdatakeys.cs
- IdentityManager.cs
- CodeExpressionCollection.cs
- XmlHierarchyData.cs
- StyleModeStack.cs
- PowerModeChangedEventArgs.cs
- TracedNativeMethods.cs
- DataControlFieldsEditor.cs
- ScriptComponentDescriptor.cs
- JoinTreeNode.cs
- SiteMapNodeItem.cs
- TimeSpanMinutesOrInfiniteConverter.cs
- ConditionCollection.cs
- HwndKeyboardInputProvider.cs
- DataGridViewColumnCollection.cs
- DefaultSerializationProviderAttribute.cs
- DataListCommandEventArgs.cs
- NonSerializedAttribute.cs
- MonthChangedEventArgs.cs
- EmptyStringExpandableObjectConverter.cs
- Set.cs
- TrustManagerPromptUI.cs
- AppDomainFactory.cs
- TokenBasedSetEnumerator.cs
- IIS7UserPrincipal.cs
- CheckBoxList.cs
- ShowExpandedMultiValueConverter.cs
- TextTreeNode.cs
- DrawToolTipEventArgs.cs
- MonitorWrapper.cs
- MarkerProperties.cs
- RSAOAEPKeyExchangeFormatter.cs
- EncoderExceptionFallback.cs
- Queue.cs
- MediaCommands.cs
- NGCSerializationManager.cs
- Hash.cs
- TextUtf8RawTextWriter.cs
- FacetEnabledSchemaElement.cs
- GroupPartitionExpr.cs
- SamlAction.cs
- DataServiceStreamResponse.cs
- TextWriterEngine.cs
- BindingSource.cs
- BamlResourceSerializer.cs
- CustomError.cs
- SqlDataSourceStatusEventArgs.cs
- StateMachineWorkflowDesigner.cs
- PenContext.cs
- QilTypeChecker.cs
- StringKeyFrameCollection.cs
- SQLDecimal.cs
- Parser.cs
- XPathNodePointer.cs
- ProgressBar.cs