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
- BitmapEffectRenderDataResource.cs
- CollectionBase.cs
- XsdValidatingReader.cs
- XmlReader.cs
- DataGridViewHitTestInfo.cs
- TextElementCollection.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- SqlAggregateChecker.cs
- RelativeSource.cs
- HtmlPageAdapter.cs
- BindingCompleteEventArgs.cs
- ReferenceConverter.cs
- XmlSchemaSimpleContentExtension.cs
- ForwardPositionQuery.cs
- BinaryKeyIdentifierClause.cs
- Privilege.cs
- DataGridViewRowPostPaintEventArgs.cs
- MiniLockedBorderGlyph.cs
- StylusPointPropertyInfoDefaults.cs
- CompositeTypefaceMetrics.cs
- RewritingProcessor.cs
- ConsumerConnectionPoint.cs
- RangeExpression.cs
- isolationinterop.cs
- InputLanguageEventArgs.cs
- BroadcastEventHelper.cs
- NativeMethods.cs
- CorePropertiesFilter.cs
- ObjectConverter.cs
- ReadOnlyCollectionBase.cs
- ElementHost.cs
- RuntimeConfigurationRecord.cs
- BindingsCollection.cs
- _SpnDictionary.cs
- SHA1CryptoServiceProvider.cs
- DataGridViewCellEventArgs.cs
- CounterCreationDataCollection.cs
- MDIControlStrip.cs
- OleDbWrapper.cs
- TypeCodeDomSerializer.cs
- RoleGroup.cs
- VirtualDirectoryMapping.cs
- RequestContext.cs
- XPathEmptyIterator.cs
- ScopelessEnumAttribute.cs
- TabControlDesigner.cs
- DataServiceQueryContinuation.cs
- PerformanceCountersElement.cs
- ThicknessAnimationUsingKeyFrames.cs
- smtpconnection.cs
- ITextView.cs
- EntitySqlQueryCacheKey.cs
- TimeManager.cs
- SolidBrush.cs
- ComponentEditorPage.cs
- RecognizeCompletedEventArgs.cs
- DesignerGenericWebPart.cs
- DataGridViewRowEventArgs.cs
- CodeNamespace.cs
- FieldToken.cs
- CodeArgumentReferenceExpression.cs
- SqlDataSourceRefreshSchemaForm.cs
- EntityRecordInfo.cs
- WebConfigurationManager.cs
- MenuScrollingVisibilityConverter.cs
- HttpPostedFile.cs
- TreeNodeConverter.cs
- SQLRoleProvider.cs
- StateMachineDesignerPaint.cs
- DecimalFormatter.cs
- SettingsPropertyCollection.cs
- HtmlImage.cs
- UInt16Storage.cs
- IDispatchConstantAttribute.cs
- Tablet.cs
- RegionData.cs
- ListViewSelectEventArgs.cs
- SafeBitVector32.cs
- documentsequencetextpointer.cs
- EventArgs.cs
- SqlMethodAttribute.cs
- ManagementOperationWatcher.cs
- Label.cs
- printdlgexmarshaler.cs
- FileVersion.cs
- input.cs
- SqlDataSourceCustomCommandEditor.cs
- SecurityPermission.cs
- AutomationPropertyInfo.cs
- SplashScreenNativeMethods.cs
- DataGridViewCellCollection.cs
- MemoryPressure.cs
- HandleCollector.cs
- DataRecordInternal.cs
- UrlPath.cs
- CorrelationRequestContext.cs
- ObjectSet.cs
- MessageProtectionOrder.cs
- OrderedDictionary.cs
- AsyncOperationManager.cs