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
- Logging.cs
- TypeDescriptionProvider.cs
- EnumerationRangeValidationUtil.cs
- OdbcFactory.cs
- DataTable.cs
- PartManifestEntry.cs
- CodeAttributeDeclaration.cs
- XmlSchemaAny.cs
- COM2ComponentEditor.cs
- InitialServerConnectionReader.cs
- CompositeFontFamily.cs
- ComAdminInterfaces.cs
- TextContainer.cs
- ProjectionPlanCompiler.cs
- ProxyWebPartManager.cs
- _ProxyRegBlob.cs
- Encoder.cs
- Constants.cs
- ServiceOperationWrapper.cs
- BamlRecordHelper.cs
- StorageEntityTypeMapping.cs
- IpcManager.cs
- ForceCopyBuildProvider.cs
- ArraySubsetEnumerator.cs
- WindowsRichEditRange.cs
- ValidationResult.cs
- DataGridViewDataErrorEventArgs.cs
- BitmapSourceSafeMILHandle.cs
- SingleSelectRootGridEntry.cs
- ClassData.cs
- CustomCategoryAttribute.cs
- Point4D.cs
- EnglishPluralizationService.cs
- ExpandSegmentCollection.cs
- SignatureTargetIdManager.cs
- DataGridViewSelectedRowCollection.cs
- RoleManagerEventArgs.cs
- DateTimeOffsetConverter.cs
- ProcessHostFactoryHelper.cs
- AsyncOperationContext.cs
- BackoffTimeoutHelper.cs
- ClientProxyGenerator.cs
- XmlBinaryWriter.cs
- RecognitionResult.cs
- SoapDocumentServiceAttribute.cs
- InkCanvasSelectionAdorner.cs
- RtfToXamlReader.cs
- CaretElement.cs
- HttpRequestCacheValidator.cs
- TransactionFilter.cs
- DataControlFieldHeaderCell.cs
- DynamicObject.cs
- SQLGuid.cs
- CallSiteHelpers.cs
- CheckBoxBaseAdapter.cs
- CompatibleComparer.cs
- ConnectorEditor.cs
- Thread.cs
- CompositeFontFamily.cs
- Latin1Encoding.cs
- PopOutPanel.cs
- _SslState.cs
- PreProcessor.cs
- PeoplePickerWrapper.cs
- HttpInputStream.cs
- RectangleGeometry.cs
- AccessViolationException.cs
- MachineKeySection.cs
- DelegatingTypeDescriptionProvider.cs
- OutputCacheSettingsSection.cs
- XmlUtil.cs
- DataSourceControlBuilder.cs
- PrintDialogException.cs
- CodeTypeDelegate.cs
- ProviderException.cs
- TextParagraph.cs
- PerformanceCounters.cs
- WorkflowDesignerMessageFilter.cs
- ComplexType.cs
- ZoneIdentityPermission.cs
- ISessionStateStore.cs
- WinFormsSpinner.cs
- CodeParameterDeclarationExpression.cs
- UInt32.cs
- Vector3DAnimationBase.cs
- SqlBooleanMismatchVisitor.cs
- InvalidCommandTreeException.cs
- OperationContractGenerationContext.cs
- TableCellAutomationPeer.cs
- TableLayoutSettingsTypeConverter.cs
- DomainConstraint.cs
- XmlChildEnumerator.cs
- EventLogEntryCollection.cs
- WebBrowser.cs
- FileLoadException.cs
- DbXmlEnabledProviderManifest.cs
- EntityDataReader.cs
- DataGridViewSelectedRowCollection.cs
- CheckBoxBaseAdapter.cs
- SHA512.cs