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
- URLIdentityPermission.cs
- PageThemeParser.cs
- XmlDataProvider.cs
- Transform3DGroup.cs
- ContextMenuAutomationPeer.cs
- WorkflowMarkupSerializationManager.cs
- IndividualDeviceConfig.cs
- X509Logo.cs
- CompareValidator.cs
- DataColumn.cs
- SmtpReplyReader.cs
- CompressionTransform.cs
- CookieParameter.cs
- RuntimeConfigurationRecord.cs
- MemberDescriptor.cs
- SchemaNotation.cs
- PathSegment.cs
- DoubleAnimation.cs
- OleDbMetaDataFactory.cs
- SmiEventSink_DeferedProcessing.cs
- LabelLiteral.cs
- List.cs
- HostSecurityManager.cs
- AutomationElement.cs
- ControlCollection.cs
- TextRenderer.cs
- DataGridToolTip.cs
- SerializableAuthorizationContext.cs
- StatusBarItemAutomationPeer.cs
- XamlStyleSerializer.cs
- BaseAsyncResult.cs
- _UriSyntax.cs
- KnownBoxes.cs
- AsyncOperation.cs
- UnmanagedHandle.cs
- UTF32Encoding.cs
- diagnosticsswitches.cs
- Style.cs
- StateMachineDesignerPaint.cs
- documentsequencetextcontainer.cs
- ServiceDocument.cs
- FixedTextContainer.cs
- DropDownButton.cs
- PageVisual.cs
- ParameterModifier.cs
- WmlLinkAdapter.cs
- ServicePoint.cs
- ManagedIStream.cs
- MethodImplAttribute.cs
- log.cs
- LazyTextWriterCreator.cs
- DataListItemEventArgs.cs
- BindingsCollection.cs
- StandardToolWindows.cs
- Light.cs
- DynamicControl.cs
- XslTransform.cs
- LayoutExceptionEventArgs.cs
- XmlRootAttribute.cs
- documentation.cs
- SingleSelectRootGridEntry.cs
- DBPropSet.cs
- AtomServiceDocumentSerializer.cs
- ScrollViewerAutomationPeer.cs
- HtmlHistory.cs
- PositiveTimeSpanValidator.cs
- UInt64Storage.cs
- KeyValuePair.cs
- DataServicePagingProviderWrapper.cs
- EntityContainerEmitter.cs
- ExpandableObjectConverter.cs
- SchemaSetCompiler.cs
- ResXDataNode.cs
- BuildProvidersCompiler.cs
- elementinformation.cs
- TraceSection.cs
- GPPOINT.cs
- columnmapfactory.cs
- QilStrConcat.cs
- GenericTypeParameterBuilder.cs
- ConnectionPoolRegistry.cs
- SchemaImporterExtensionElement.cs
- _AutoWebProxyScriptHelper.cs
- Native.cs
- RelationshipSet.cs
- serverconfig.cs
- PersonalizationEntry.cs
- XappLauncher.cs
- EditingCommands.cs
- CommandBinding.cs
- ColumnTypeConverter.cs
- ResXFileRef.cs
- Nodes.cs
- GenericTextProperties.cs
- X509ChainPolicy.cs
- indexingfiltermarshaler.cs
- TextRunTypographyProperties.cs
- GridToolTip.cs
- RequestCachePolicyConverter.cs
- FontEmbeddingManager.cs