Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / DynamicData / DynamicData / ModelProviders / EFTableProvider.cs / 1305376 / EFTableProvider.cs
using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data.Metadata.Edm; using System.Data.Objects; using System.Linq; using System.Reflection; namespace System.Web.DynamicData.ModelProviders { internal sealed class EFTableProvider : TableProvider { private ReadOnlyCollection_roColumns; public EFTableProvider(EFDataModelProvider dataModel, EntitySet entitySet, EntityType entityType, Type entityClrType, Type parentEntityClrType, Type rootEntityClrType, string name) : base(dataModel) { EntityType = entityClrType; Name = name; DataContextPropertyName = entitySet.Name; ParentEntityType = parentEntityClrType; RootEntityType = rootEntityClrType; var genericMethod = DataModel.ContextType.GetMethod("CreateQuery"); CreateQueryMethod = genericMethod.MakeGenericMethod(EntityType); CreateQueryString = CreateEntitySqlQueryString(entitySet); var keyMembers = entityType.KeyMembers; // columns (entity properties) // note 1: keys are also available through es.ElementType.KeyMembers // note 2: this includes "nav properties", kind of fancy, two-way relationship objects var columns = new List (); foreach (EdmMember m in entityType.Members) { if (EFColumnProvider.IsSupportedEdmMemberType(m) && IsPublicProperty(entityClrType, m.Name)) { EFColumnProvider entityMember = new EFColumnProvider(entityType, this, m, keyMembers.Contains(m)); columns.Add(entityMember); } } _roColumns = new ReadOnlyCollection (columns); } private static bool IsPublicProperty(Type entityClrType, string propertyName) { var property = entityClrType.GetProperty(propertyName); return property != null && property.GetGetMethod() != null; } private MethodInfo CreateQueryMethod { get; set; } private string CreateQueryString { get; set; } private static string CreateEntitySqlQueryString(EntitySet entitySet) { // Qualify the entity set name with the container name (in case the ObjectContext's default // container name is not set or has an unexpected value) return QuoteEntitySqlIdentifier(entitySet.EntityContainer.Name) + "." + QuoteEntitySqlIdentifier(entitySet.Name); } private static string QuoteEntitySqlIdentifier(string identifier) { // Enclose in square brackets and escape the one reserved character (]) return "[" + identifier.Replace("]", "]]") + "]"; } public override ReadOnlyCollection Columns { get { return _roColumns; } } public override IQueryable GetQuery(object context) { return (IQueryable)CreateQueryMethod.Invoke(context, new object[] { CreateQueryString, new ObjectParameter[0] }); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PreviewKeyDownEventArgs.cs
- RawTextInputReport.cs
- LiteralControl.cs
- JsonSerializer.cs
- EventTrigger.cs
- CompilerGlobalScopeAttribute.cs
- SimpleType.cs
- MultipleViewProviderWrapper.cs
- WeakReference.cs
- MessageQuerySet.cs
- ObjectDesignerDataSourceView.cs
- BindUriHelper.cs
- PolicyManager.cs
- AnonymousIdentificationModule.cs
- ContourSegment.cs
- ResourceDescriptionAttribute.cs
- XmlStreamStore.cs
- NullRuntimeConfig.cs
- CreateUserWizard.cs
- FormsAuthenticationEventArgs.cs
- WmlLiteralTextAdapter.cs
- CommonDialog.cs
- SecurityCriticalDataForSet.cs
- DetailsViewUpdateEventArgs.cs
- IsolatedStorageException.cs
- StorageMappingItemLoader.cs
- ConsumerConnectionPoint.cs
- PageThemeCodeDomTreeGenerator.cs
- GeneralTransform.cs
- ActivityExecutorDelegateInfo.cs
- DataAdapter.cs
- SessionChannels.cs
- DbConnectionPoolGroupProviderInfo.cs
- InteropBitmapSource.cs
- Group.cs
- CryptoStream.cs
- TraceListeners.cs
- RegexWorker.cs
- BaseConfigurationRecord.cs
- XsltLibrary.cs
- DataServiceQuery.cs
- Tablet.cs
- CompModSwitches.cs
- RMPermissions.cs
- TimelineClockCollection.cs
- StylusPointProperties.cs
- Int32Animation.cs
- GlyphCollection.cs
- DiscoveryClientBindingElement.cs
- AttachmentService.cs
- ChannelRequirements.cs
- CounterSample.cs
- xmlsaver.cs
- EventRouteFactory.cs
- ReadOnlyDataSource.cs
- AsymmetricCryptoHandle.cs
- ProgressBarRenderer.cs
- EditorZone.cs
- RectConverter.cs
- BaseInfoTable.cs
- ConfigXmlElement.cs
- SmiRecordBuffer.cs
- IFormattable.cs
- mediaeventshelper.cs
- FacetDescriptionElement.cs
- WindowsScrollBar.cs
- SqlUserDefinedTypeAttribute.cs
- NamespaceTable.cs
- Geometry3D.cs
- Substitution.cs
- PropertyItemInternal.cs
- ListViewPagedDataSource.cs
- ClassicBorderDecorator.cs
- WhiteSpaceTrimStringConverter.cs
- DescendantQuery.cs
- SoapTransportImporter.cs
- ReceiveCompletedEventArgs.cs
- GeneralTransform2DTo3D.cs
- ParenExpr.cs
- EntityDataSource.cs
- XmlSignatureManifest.cs
- BamlVersionHeader.cs
- _DisconnectOverlappedAsyncResult.cs
- EmptyQuery.cs
- AssemblyContextControlItem.cs
- ScaleTransform3D.cs
- GraphicsContainer.cs
- DebugHandleTracker.cs
- ConnectionProviderAttribute.cs
- XmlSubtreeReader.cs
- SerialPort.cs
- EdmItemError.cs
- EndpointDiscoveryMetadata.cs
- sitestring.cs
- TcpChannelListener.cs
- MainMenu.cs
- Buffer.cs
- ObjectManager.cs
- PersonalizableAttribute.cs
- GuidConverter.cs