Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataEntity / System / Data / Objects / objectresult_tresulttype.cs / 2 / 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 IEnumeratorGetEnumerator() { 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 IEnumeratorGetEnumerator() { 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
- XmlSchemaSimpleTypeUnion.cs
- ControlBuilder.cs
- SystemColors.cs
- ClockController.cs
- MsmqIntegrationBindingElement.cs
- WebPartsPersonalization.cs
- CombinedGeometry.cs
- ResizeBehavior.cs
- FixedFindEngine.cs
- Bidi.cs
- Line.cs
- ListBase.cs
- Enum.cs
- PointKeyFrameCollection.cs
- OpacityConverter.cs
- MemoryRecordBuffer.cs
- OrderByBuilder.cs
- FrameworkTemplate.cs
- SchemaNames.cs
- HttpCapabilitiesSectionHandler.cs
- MetadataArtifactLoaderComposite.cs
- Pen.cs
- SqlMethods.cs
- CorrelationKeyCalculator.cs
- IntegerValidator.cs
- TextTreeText.cs
- ClientFormsAuthenticationMembershipProvider.cs
- ImageAnimator.cs
- SyndicationItem.cs
- x509store.cs
- ListItemCollection.cs
- PopOutPanel.cs
- EmptyReadOnlyDictionaryInternal.cs
- BuildProvider.cs
- HTTPNotFoundHandler.cs
- PrinterResolution.cs
- BorderSidesEditor.cs
- IconHelper.cs
- ExceptionHelpers.cs
- TextEditorContextMenu.cs
- AnnotationAdorner.cs
- ThreadStartException.cs
- CardSpaceSelector.cs
- ExtensibleClassFactory.cs
- ToolBarButton.cs
- TraversalRequest.cs
- BufferBuilder.cs
- FormViewRow.cs
- ReadOnlyNameValueCollection.cs
- HeaderElement.cs
- Int16KeyFrameCollection.cs
- StaticExtensionConverter.cs
- TextTreeRootTextBlock.cs
- BindingWorker.cs
- XmlArrayItemAttribute.cs
- thaishape.cs
- EntityReference.cs
- AssemblyAssociatedContentFileAttribute.cs
- NativeMethods.cs
- WebPartAddingEventArgs.cs
- EdmProviderManifest.cs
- StylusPlugInCollection.cs
- SqlDataSourceQuery.cs
- OdbcHandle.cs
- Italic.cs
- Grid.cs
- RoutedCommand.cs
- DesignerSerializerAttribute.cs
- cache.cs
- StreamedWorkflowDefinitionContext.cs
- EventMappingSettings.cs
- TabControl.cs
- GridItemPattern.cs
- SecurityState.cs
- InkSerializer.cs
- Point.cs
- SoapElementAttribute.cs
- DataGridViewRowsAddedEventArgs.cs
- OdbcErrorCollection.cs
- TabControlDesigner.cs
- X509Certificate2.cs
- XmlParser.cs
- Memoizer.cs
- SpellerStatusTable.cs
- TypeContext.cs
- VariantWrapper.cs
- XPathConvert.cs
- SecurityPermission.cs
- AnnotationComponentChooser.cs
- TextSpan.cs
- XmlSchemaComplexContentRestriction.cs
- PinnedBufferMemoryStream.cs
- SpoolingTask.cs
- sqlinternaltransaction.cs
- DCSafeHandle.cs
- DefaultValidator.cs
- PropertyPushdownHelper.cs
- ProcessHostFactoryHelper.cs
- SystemNetworkInterface.cs
- NativeWindow.cs