Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataEntity / System / Data / Common / QueryCache / EntityClientCacheKey.cs / 1 / 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
- CollectionView.cs
- UseManagedPresentationElement.cs
- EntityKeyElement.cs
- XmlSignificantWhitespace.cs
- PersonalizationState.cs
- StackSpiller.Bindings.cs
- ValueProviderWrapper.cs
- TemplateControlParser.cs
- EventLogTraceListener.cs
- NetworkInformationPermission.cs
- TemplatePagerField.cs
- Pts.cs
- IndexOutOfRangeException.cs
- FamilyTypefaceCollection.cs
- RawKeyboardInputReport.cs
- UserMapPath.cs
- FixedSOMPageConstructor.cs
- Html32TextWriter.cs
- PriorityRange.cs
- GenerateTemporaryTargetAssembly.cs
- Trace.cs
- LineUtil.cs
- SoapRpcServiceAttribute.cs
- CodeTypeReference.cs
- ResolveNameEventArgs.cs
- TextParagraph.cs
- Group.cs
- XmlArrayItemAttribute.cs
- Brush.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- NativeMethods.cs
- TypeUsageBuilder.cs
- DrawTreeNodeEventArgs.cs
- BuiltInPermissionSets.cs
- FormClosedEvent.cs
- CompressStream.cs
- OrderingExpression.cs
- NodeInfo.cs
- AxisAngleRotation3D.cs
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- PerspectiveCamera.cs
- Unit.cs
- HiddenField.cs
- xdrvalidator.cs
- StaticSiteMapProvider.cs
- DynamicILGenerator.cs
- CategoryAttribute.cs
- FamilyMap.cs
- FontDifferentiator.cs
- COM2ExtendedBrowsingHandler.cs
- ClientRolePrincipal.cs
- ClipboardData.cs
- SchemaTableOptionalColumn.cs
- InstanceDataCollection.cs
- PopupEventArgs.cs
- SQLString.cs
- MouseDevice.cs
- JulianCalendar.cs
- DoubleKeyFrameCollection.cs
- SimpleBitVector32.cs
- DataFormats.cs
- SocketSettings.cs
- Vector3DAnimation.cs
- TextServicesContext.cs
- StylusPointProperties.cs
- DrawTreeNodeEventArgs.cs
- NamespaceMapping.cs
- StreamingContext.cs
- IsolatedStorageException.cs
- RequestResizeEvent.cs
- NativeRightsManagementAPIsStructures.cs
- TextRangeProviderWrapper.cs
- AuthenticatingEventArgs.cs
- DataGridView.cs
- IPAddress.cs
- StylusPointProperties.cs
- KernelTypeValidation.cs
- BaseInfoTable.cs
- SystemIPGlobalProperties.cs
- ThreadNeutralSemaphore.cs
- Model3D.cs
- ExpressionPrefixAttribute.cs
- ClipboardData.cs
- XmlAtomicValue.cs
- Pens.cs
- Lease.cs
- QilIterator.cs
- X509Certificate2.cs
- XmlMessageFormatter.cs
- AttributeProviderAttribute.cs
- CompilerScope.Storage.cs
- StateInitializationDesigner.cs
- XmlTextReaderImpl.cs
- AnimationStorage.cs
- SerializableAttribute.cs
- SchemaConstraints.cs
- DesignerCategoryAttribute.cs
- TableRow.cs
- TraceSwitch.cs
- ManipulationStartingEventArgs.cs