Code:
/ 4.0 / 4.0 / 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. 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
- SqlGenerator.cs
- ClientScriptItemCollection.cs
- SafeCryptoHandles.cs
- FrameworkElement.cs
- Sentence.cs
- NetworkInformationException.cs
- CorrelationKey.cs
- StyleTypedPropertyAttribute.cs
- ClaimComparer.cs
- ISAPIApplicationHost.cs
- MethodMessage.cs
- PopupRootAutomationPeer.cs
- ContentOperations.cs
- UIElementParaClient.cs
- ConfigurationManager.cs
- XsltOutput.cs
- BufferedGraphicsContext.cs
- TreeIterators.cs
- PeerApplication.cs
- DocumentGrid.cs
- JournalEntryListConverter.cs
- ParameterModifier.cs
- DesignerMetadata.cs
- TextServicesProperty.cs
- Pair.cs
- Conditional.cs
- ToolStripMenuItem.cs
- OutgoingWebRequestContext.cs
- Queue.cs
- ContainerSelectorGlyph.cs
- SapiInterop.cs
- MailSettingsSection.cs
- AssemblyUtil.cs
- ModelTreeManager.cs
- CFStream.cs
- InternalConfigRoot.cs
- _ContextAwareResult.cs
- QueryGeneratorBase.cs
- LayoutInformation.cs
- TagPrefixAttribute.cs
- TargetControlTypeCache.cs
- TemplateField.cs
- BlockUIContainer.cs
- DetailsViewInsertEventArgs.cs
- ThreadStaticAttribute.cs
- SimpleTextLine.cs
- NamespaceInfo.cs
- SafeRegistryHandle.cs
- MimeXmlReflector.cs
- XD.cs
- BindingListCollectionView.cs
- EventManager.cs
- ExpressionLink.cs
- RequestCacheManager.cs
- ConfigurationManagerHelperFactory.cs
- OleDbSchemaGuid.cs
- EdgeProfileValidation.cs
- CreateUserErrorEventArgs.cs
- LayoutEditorPart.cs
- PiiTraceSource.cs
- PerspectiveCamera.cs
- DurableTimerExtension.cs
- SettingsProperty.cs
- DynamicArgumentDialog.cs
- SchemaImporterExtensionElementCollection.cs
- OdbcFactory.cs
- RoleProviderPrincipal.cs
- ToolStripLabel.cs
- Module.cs
- GrammarBuilderDictation.cs
- ZipIOExtraField.cs
- HtmlAnchor.cs
- CryptoKeySecurity.cs
- AttributeSetAction.cs
- XmlBoundElement.cs
- UnsafeNativeMethods.cs
- JavaScriptString.cs
- FreezableCollection.cs
- CodeMemberMethod.cs
- FormViewRow.cs
- DataFormat.cs
- SoapException.cs
- PasswordPropertyTextAttribute.cs
- OutputCacheSettingsSection.cs
- EntryWrittenEventArgs.cs
- PublisherMembershipCondition.cs
- SchemaMapping.cs
- SimpleHandlerBuildProvider.cs
- NameValuePair.cs
- SmtpException.cs
- SrgsSubset.cs
- ACL.cs
- EditorZoneBase.cs
- FieldNameLookup.cs
- PrePrepareMethodAttribute.cs
- ToolStripSplitStackLayout.cs
- GenericIdentity.cs
- HtmlTableCell.cs
- FormClosedEvent.cs
- UserUseLicenseDictionaryLoader.cs