Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataEntity / System / Data / Objects / objectresult_tresulttype.cs / 1 / objectresult_tresulttype.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupowner [....]
//---------------------------------------------------------------------
namespace System.Data.Objects
{
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Data;
using System.Data.Common;
using System.Data.Metadata.Edm;
using System.Data.Mapping;
using System.Data.Objects.DataClasses;
using System.Diagnostics;
using System.Linq.Expressions;
using System.Data.Common.Internal.Materialization;
///
/// This class implements IEnumerable of T and IDisposable. Instance of this class
/// is returned from ObjectQuery<T>.Execute method.
///
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")]
public sealed class ObjectResult : ObjectResult, IEnumerable
{
private Shaper _shaper;
private DbDataReader _reader;
private readonly EntitySet _singleEntitySet;
private readonly TypeUsage _resultItemType;
private IBindingList _cachedBindingList;
internal ObjectResult(Shaper shaper, EntitySet singleEntitySet, TypeUsage resultItemType)
{
_shaper = shaper;
_reader = _shaper.Reader;
_singleEntitySet = singleEntitySet;
_resultItemType = resultItemType;
}
private void EnsureCanEnumerateResults()
{
if (null == _shaper)
{
// Enumerating more than once is not allowed.
throw EntityUtil.CannotReEnumerateQueryResults();
}
}
///
/// Returns an enumerator that iterates through the collection.
///
public IEnumerator GetEnumerator()
{
EnsureCanEnumerateResults();
Shaper shaper = _shaper;
_shaper = null;
IEnumerator result = shaper.GetEnumerator();
return result;
}
///
/// Performs tasks associated with freeing, releasing, or resetting resources.
///
public override void Dispose()
{
DbDataReader reader = _reader;
_reader = null;
if (null != reader)
{
reader.Dispose();
}
if (_shaper != null)
{
// This case includes when the ObjectResult is disposed before it
// created an ObjectQueryEnumeration; at this time, the connection can be released
if (_shaper.Context != null)
{
_shaper.Context.ReleaseConnection();
}
_shaper = null;
}
}
internal override IEnumerator GetEnumeratorInternal()
{
return ((IEnumerable)this).GetEnumerator();
}
internal override IList GetIListSourceListInternal()
{
// You can only enumerate the query results once, and the creation of an ObjectView consumes this enumeration.
// However, there are situations where setting the DataSource of a control can result in multiple calls to this method.
// In order to enable this scenario and allow direct binding to the ObjectResult instance,
// the ObjectView is cached and returned on subsequent calls to this method.
if (_cachedBindingList == null)
{
EnsureCanEnumerateResults();
bool forceReadOnly = this._shaper.MergeOption == MergeOption.NoTracking;
_cachedBindingList = ObjectViewFactory.CreateViewForQuery(this._resultItemType, this, this._shaper.Context, forceReadOnly, this._singleEntitySet);
}
return _cachedBindingList;
}
public override Type ElementType
{
get { return typeof(T); }
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupowner [....]
//---------------------------------------------------------------------
namespace System.Data.Objects
{
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Data;
using System.Data.Common;
using System.Data.Metadata.Edm;
using System.Data.Mapping;
using System.Data.Objects.DataClasses;
using System.Diagnostics;
using System.Linq.Expressions;
using System.Data.Common.Internal.Materialization;
///
/// This class implements IEnumerable of T and IDisposable. Instance of this class
/// is returned from ObjectQuery<T>.Execute method.
///
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")]
public sealed class ObjectResult : ObjectResult, IEnumerable
{
private Shaper _shaper;
private DbDataReader _reader;
private readonly EntitySet _singleEntitySet;
private readonly TypeUsage _resultItemType;
private IBindingList _cachedBindingList;
internal ObjectResult(Shaper shaper, EntitySet singleEntitySet, TypeUsage resultItemType)
{
_shaper = shaper;
_reader = _shaper.Reader;
_singleEntitySet = singleEntitySet;
_resultItemType = resultItemType;
}
private void EnsureCanEnumerateResults()
{
if (null == _shaper)
{
// Enumerating more than once is not allowed.
throw EntityUtil.CannotReEnumerateQueryResults();
}
}
///
/// Returns an enumerator that iterates through the collection.
///
public IEnumerator GetEnumerator()
{
EnsureCanEnumerateResults();
Shaper shaper = _shaper;
_shaper = null;
IEnumerator result = shaper.GetEnumerator();
return result;
}
///
/// Performs tasks associated with freeing, releasing, or resetting resources.
///
public override void Dispose()
{
DbDataReader reader = _reader;
_reader = null;
if (null != reader)
{
reader.Dispose();
}
if (_shaper != null)
{
// This case includes when the ObjectResult is disposed before it
// created an ObjectQueryEnumeration; at this time, the connection can be released
if (_shaper.Context != null)
{
_shaper.Context.ReleaseConnection();
}
_shaper = null;
}
}
internal override IEnumerator GetEnumeratorInternal()
{
return ((IEnumerable)this).GetEnumerator();
}
internal override IList GetIListSourceListInternal()
{
// You can only enumerate the query results once, and the creation of an ObjectView consumes this enumeration.
// However, there are situations where setting the DataSource of a control can result in multiple calls to this method.
// In order to enable this scenario and allow direct binding to the ObjectResult instance,
// the ObjectView is cached and returned on subsequent calls to this method.
if (_cachedBindingList == null)
{
EnsureCanEnumerateResults();
bool forceReadOnly = this._shaper.MergeOption == MergeOption.NoTracking;
_cachedBindingList = ObjectViewFactory.CreateViewForQuery(this._resultItemType, this, this._shaper.Context, forceReadOnly, this._singleEntitySet);
}
return _cachedBindingList;
}
public override Type ElementType
{
get { return typeof(T); }
}
}
}
// 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
- TextDpi.cs
- Help.cs
- StringResourceManager.cs
- TextFindEngine.cs
- RawKeyboardInputReport.cs
- ClaimTypes.cs
- ComContractElement.cs
- ReachDocumentReferenceSerializerAsync.cs
- EDesignUtil.cs
- CurrentTimeZone.cs
- StorageEndPropertyMapping.cs
- CapabilitiesRule.cs
- XmlDictionaryString.cs
- IriParsingElement.cs
- MonthChangedEventArgs.cs
- NullableIntSumAggregationOperator.cs
- CapacityStreamGeometryContext.cs
- ContainerParagraph.cs
- Int32CAMarshaler.cs
- SchemeSettingElement.cs
- DebugView.cs
- PenCursorManager.cs
- MultiDataTrigger.cs
- SqlProviderServices.cs
- QilNode.cs
- XmlAnyElementAttributes.cs
- SplayTreeNode.cs
- XMLDiffLoader.cs
- WebPart.cs
- DockPattern.cs
- CriticalHandle.cs
- InitializationEventAttribute.cs
- SchemaElementLookUpTableEnumerator.cs
- ControlIdConverter.cs
- SystemResources.cs
- ManagedWndProcTracker.cs
- DocumentViewer.cs
- BCLDebug.cs
- MenuBase.cs
- TemplateControlParser.cs
- WindowsUpDown.cs
- TextRangeAdaptor.cs
- PositiveTimeSpanValidator.cs
- FileDialog.cs
- IODescriptionAttribute.cs
- panel.cs
- ColorConvertedBitmapExtension.cs
- DataGridViewHeaderCell.cs
- BrowserCapabilitiesCodeGenerator.cs
- ResourceReferenceExpressionConverter.cs
- ThreadExceptionEvent.cs
- SpotLight.cs
- AutoGeneratedFieldProperties.cs
- RedirectionProxy.cs
- Type.cs
- DefaultParameterValueAttribute.cs
- SchemeSettingElementCollection.cs
- Helpers.cs
- CacheOutputQuery.cs
- MorphHelper.cs
- Transform3DGroup.cs
- DynamicILGenerator.cs
- VectorAnimationUsingKeyFrames.cs
- ColumnCollectionEditor.cs
- CryptographicAttribute.cs
- SelectionPattern.cs
- DBSqlParserTable.cs
- MsmqProcessProtocolHandler.cs
- JsonXmlDataContract.cs
- TableItemProviderWrapper.cs
- SystemMulticastIPAddressInformation.cs
- EventLogPermissionEntry.cs
- QuaternionKeyFrameCollection.cs
- DataGridViewCellStyle.cs
- NumberSubstitution.cs
- CorrelationInitializer.cs
- ExtenderProviderService.cs
- ColorConverter.cs
- RootBrowserWindowAutomationPeer.cs
- CodeCompileUnit.cs
- ShutDownListener.cs
- Version.cs
- DeflateStream.cs
- SqlBooleanMismatchVisitor.cs
- AlphabeticalEnumConverter.cs
- SoapObjectInfo.cs
- ECDiffieHellmanCng.cs
- UrlPropertyAttribute.cs
- _AutoWebProxyScriptHelper.cs
- BlockExpression.cs
- Utils.cs
- XmlIterators.cs
- Util.cs
- Content.cs
- TickBar.cs
- PKCS1MaskGenerationMethod.cs
- BlurBitmapEffect.cs
- UnsafeNativeMethodsMilCoreApi.cs
- ContextItem.cs
- VersionedStreamOwner.cs