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
- EntityClientCacheKey.cs
- HostedImpersonationContext.cs
- QuadraticBezierSegment.cs
- PointLight.cs
- UniformGrid.cs
- ContextStaticAttribute.cs
- FontWeightConverter.cs
- OleDbRowUpdatingEvent.cs
- PropertyGridView.cs
- ContractComponent.cs
- ModulesEntry.cs
- CodeDOMUtility.cs
- ListItemCollection.cs
- XmlLangPropertyAttribute.cs
- FacetChecker.cs
- ValuePattern.cs
- ArraySubsetEnumerator.cs
- SourceChangedEventArgs.cs
- DirectionalLight.cs
- EndpointIdentity.cs
- ListViewInsertEventArgs.cs
- Int16Animation.cs
- ComponentRenameEvent.cs
- ConfigurationLoaderException.cs
- PropertyGeneratedEventArgs.cs
- InvalidFilterCriteriaException.cs
- AddingNewEventArgs.cs
- Comparer.cs
- GridViewUpdatedEventArgs.cs
- RuntimeHandles.cs
- StickyNoteContentControl.cs
- FrameworkRichTextComposition.cs
- ComponentRenameEvent.cs
- TextRangeAdaptor.cs
- CompositionTarget.cs
- SecurityIdentifierElementCollection.cs
- DataListItemEventArgs.cs
- OracleDataAdapter.cs
- DataRelationPropertyDescriptor.cs
- CssStyleCollection.cs
- DataGridViewRowErrorTextNeededEventArgs.cs
- InputLangChangeRequestEvent.cs
- ResourceDescriptionAttribute.cs
- HandleValueEditor.cs
- Switch.cs
- RayMeshGeometry3DHitTestResult.cs
- SafeNativeHandle.cs
- DetailsViewPagerRow.cs
- TextTrailingWordEllipsis.cs
- RenamedEventArgs.cs
- DataBindingCollection.cs
- QilPatternFactory.cs
- DataGridViewRowsRemovedEventArgs.cs
- DynamicPropertyHolder.cs
- ToolStripDesigner.cs
- BroadcastEventHelper.cs
- DivideByZeroException.cs
- SessionPageStateSection.cs
- StopStoryboard.cs
- propertytag.cs
- PageParserFilter.cs
- WebSysDefaultValueAttribute.cs
- EndPoint.cs
- GridViewColumnHeader.cs
- CodeNamespaceCollection.cs
- SocketCache.cs
- ColorConvertedBitmap.cs
- TextElementCollection.cs
- MobileControlsSectionHelper.cs
- CheckableControlBaseAdapter.cs
- IndexOutOfRangeException.cs
- Serializer.cs
- Keywords.cs
- IisTraceWebEventProvider.cs
- Collection.cs
- TableItemPatternIdentifiers.cs
- ExpressionNormalizer.cs
- ToolCreatedEventArgs.cs
- VerticalAlignConverter.cs
- ProtocolsSection.cs
- EventListener.cs
- __Filters.cs
- MaterialGroup.cs
- PreviewPrintController.cs
- TimeStampChecker.cs
- ActivationArguments.cs
- HeaderedItemsControl.cs
- DataGridrowEditEndingEventArgs.cs
- DefaultMemberAttribute.cs
- UpDownBase.cs
- DescriptionAttribute.cs
- TextElementEditingBehaviorAttribute.cs
- Button.cs
- BasicKeyConstraint.cs
- WebPartHelpVerb.cs
- SizeValueSerializer.cs
- UriParserTemplates.cs
- WorkflowFileItem.cs
- EmptyControlCollection.cs
- ListViewEditEventArgs.cs