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
- SmiEventStream.cs
- ContourSegment.cs
- SqlDependency.cs
- DetailsView.cs
- PngBitmapDecoder.cs
- ColumnTypeConverter.cs
- HtmlTernaryTree.cs
- TdsParser.cs
- BuilderInfo.cs
- activationcontext.cs
- MenuAdapter.cs
- AccessKeyManager.cs
- CatalogPartCollection.cs
- ThreadPool.cs
- ConfigXmlSignificantWhitespace.cs
- ButtonPopupAdapter.cs
- HttpProfileBase.cs
- ImageAnimator.cs
- AnnotationObservableCollection.cs
- ModelEditingScope.cs
- DataGridRelationshipRow.cs
- MonthChangedEventArgs.cs
- RepeatBehavior.cs
- TabPanel.cs
- CodeSnippetCompileUnit.cs
- ElementNotAvailableException.cs
- BooleanToSelectiveScrollingOrientationConverter.cs
- HtmlTableRow.cs
- RadioButtonFlatAdapter.cs
- ReadWriteObjectLock.cs
- Scene3D.cs
- SendContent.cs
- fixedPageContentExtractor.cs
- Margins.cs
- WebPartExportVerb.cs
- TextEndOfParagraph.cs
- ThreadPool.cs
- CoreSwitches.cs
- SQLCharsStorage.cs
- SynchronousChannel.cs
- SwitchAttribute.cs
- PlainXmlWriter.cs
- VirtualizingPanel.cs
- SelectorAutomationPeer.cs
- XPathNodeInfoAtom.cs
- OracleColumn.cs
- ResourceProviderFactory.cs
- RightNameExpirationInfoPair.cs
- ObjectItemCollection.cs
- DbReferenceCollection.cs
- BindingCollection.cs
- HttpResponseInternalWrapper.cs
- X509ServiceCertificateAuthenticationElement.cs
- BindingGroup.cs
- ColumnTypeConverter.cs
- SystemException.cs
- AccessDataSourceView.cs
- StringOutput.cs
- IApplicationTrustManager.cs
- ConfigXmlAttribute.cs
- SimpleBitVector32.cs
- TaskFormBase.cs
- MaskedTextBoxTextEditor.cs
- NumberAction.cs
- EntityDataSourceView.cs
- StrongName.cs
- ExpressionBuilderContext.cs
- ToolStripItemEventArgs.cs
- FontEmbeddingManager.cs
- CustomTrackingRecord.cs
- DynamicRendererThreadManager.cs
- DbConnectionPoolCounters.cs
- ExpressionPrefixAttribute.cs
- XNodeSchemaApplier.cs
- DataServiceResponse.cs
- TargetControlTypeAttribute.cs
- MobileResource.cs
- PingOptions.cs
- CompositeControl.cs
- FileLoadException.cs
- CodeStatement.cs
- JapaneseLunisolarCalendar.cs
- FontUnitConverter.cs
- CultureTableRecord.cs
- WindowVisualStateTracker.cs
- ReflectionHelper.cs
- BindingExpressionBase.cs
- StoreContentChangedEventArgs.cs
- HtmlMeta.cs
- MetadataPropertyvalue.cs
- ParameterElement.cs
- VersionValidator.cs
- InheritanceAttribute.cs
- Int64AnimationUsingKeyFrames.cs
- SignatureResourcePool.cs
- FontFamilyValueSerializer.cs
- DelimitedListTraceListener.cs
- SqlRowUpdatedEvent.cs
- ActivatedMessageQueue.cs
- IntSecurity.cs