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
- OpenFileDialog.cs
- WorkflowOwnershipException.cs
- WindowsEditBoxRange.cs
- TextViewSelectionProcessor.cs
- XmlFormatExtensionPointAttribute.cs
- initElementDictionary.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- ValidationPropertyAttribute.cs
- DrawingImage.cs
- SqlFlattener.cs
- DataGridCellItemAutomationPeer.cs
- ProjectionQueryOptionExpression.cs
- ToolboxItemImageConverter.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- CroppedBitmap.cs
- DataGridRowAutomationPeer.cs
- Calendar.cs
- CodeDomSerializer.cs
- WorkflowExecutor.cs
- MenuCommand.cs
- DoubleUtil.cs
- IInstanceTable.cs
- ISessionStateStore.cs
- EmptyEnumerator.cs
- NetMsmqSecurityElement.cs
- ConnectionPoolManager.cs
- HostedAspNetEnvironment.cs
- ZipIOExtraFieldZip64Element.cs
- SQLInt64Storage.cs
- TCEAdapterGenerator.cs
- ViewKeyConstraint.cs
- OrderByLifter.cs
- SelectionList.cs
- SystemUdpStatistics.cs
- messageonlyhwndwrapper.cs
- MappableObjectManager.cs
- SEHException.cs
- ImageBrush.cs
- TextTabProperties.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- WebPartConnectVerb.cs
- StreamInfo.cs
- ImageMetadata.cs
- EventDescriptor.cs
- IsolatedStorageFileStream.cs
- WebBrowserEvent.cs
- QueryExpr.cs
- FileAuthorizationModule.cs
- IsolatedStorageFilePermission.cs
- ScriptHandlerFactory.cs
- SystemSounds.cs
- PresentationAppDomainManager.cs
- DataSourceConverter.cs
- TextModifierScope.cs
- _CacheStreams.cs
- GridViewRowPresenterBase.cs
- DataGridColumnReorderingEventArgs.cs
- Unit.cs
- ReadOnlyObservableCollection.cs
- OdbcParameter.cs
- SimpleColumnProvider.cs
- CommandID.cs
- DataStreamFromComStream.cs
- Button.cs
- SpellCheck.cs
- ParenExpr.cs
- SiteMap.cs
- TextEditorContextMenu.cs
- HttpWebRequest.cs
- ADMembershipProvider.cs
- TreeNodeCollection.cs
- TraceHandler.cs
- PagedDataSource.cs
- WebRequestModuleElementCollection.cs
- Expression.DebuggerProxy.cs
- OleDbReferenceCollection.cs
- PnrpPermission.cs
- PriorityChain.cs
- ObjectDataSourceMethodEventArgs.cs
- TouchFrameEventArgs.cs
- SafeNativeMethods.cs
- OracleString.cs
- InternalConfigHost.cs
- DetailsViewUpdatedEventArgs.cs
- OutputCacheSettings.cs
- StyleBamlTreeBuilder.cs
- ButtonChrome.cs
- WindowPatternIdentifiers.cs
- DesignTimeParseData.cs
- SimpleTextLine.cs
- TableSectionStyle.cs
- MetadataFile.cs
- ContentPropertyAttribute.cs
- Update.cs
- SearchForVirtualItemEventArgs.cs
- Task.cs
- FixedLineResult.cs
- SHA256Managed.cs
- FormViewModeEventArgs.cs
- ArgumentOutOfRangeException.cs