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
- CorePropertiesFilter.cs
- HtmlInputButton.cs
- MeasureData.cs
- ConfigXmlText.cs
- COMException.cs
- DataServiceContext.cs
- WindowsFormsSectionHandler.cs
- EventProperty.cs
- LockCookie.cs
- DriveInfo.cs
- CodeSpit.cs
- DBAsyncResult.cs
- SimpleBitVector32.cs
- MemberHolder.cs
- MappedMetaModel.cs
- DataGridViewRowsRemovedEventArgs.cs
- OdbcConnectionString.cs
- SerialErrors.cs
- GridViewRow.cs
- TextServicesCompartment.cs
- ConsoleCancelEventArgs.cs
- XsdBuildProvider.cs
- FontSizeConverter.cs
- TableRowCollection.cs
- ResourceDescriptionAttribute.cs
- QilReference.cs
- SqlWriter.cs
- KeyInstance.cs
- ImpersonationContext.cs
- DeflateStreamAsyncResult.cs
- XmlWriterDelegator.cs
- PeerCustomResolverElement.cs
- EntityAdapter.cs
- Sequence.cs
- SQLBoolean.cs
- XmlQualifiedName.cs
- TTSEvent.cs
- ToolbarAUtomationPeer.cs
- HttpCacheParams.cs
- ArraySet.cs
- CodeTypeOfExpression.cs
- ToolStripDropDownClosedEventArgs.cs
- PipeException.cs
- PenContext.cs
- RectConverter.cs
- DesignerCategoryAttribute.cs
- ProxyFragment.cs
- PtsCache.cs
- ExpandedWrapper.cs
- KeyboardInputProviderAcquireFocusEventArgs.cs
- SerializationObjectManager.cs
- Script.cs
- DBPropSet.cs
- AutoResetEvent.cs
- Verify.cs
- DataContext.cs
- SecurityPermission.cs
- PixelShader.cs
- PropertyConverter.cs
- Italic.cs
- UriTemplate.cs
- RoutingBehavior.cs
- ViewCellSlot.cs
- CatalogPartCollection.cs
- LinqDataSourceSelectEventArgs.cs
- GlobalProxySelection.cs
- StoreItemCollection.cs
- CriticalFinalizerObject.cs
- Point3DIndependentAnimationStorage.cs
- StyleBamlRecordReader.cs
- EditorZone.cs
- ConnectionPoolManager.cs
- XmlAttributeAttribute.cs
- SafeBitVector32.cs
- MouseButtonEventArgs.cs
- PopOutPanel.cs
- BindingSource.cs
- StateChangeEvent.cs
- BlurEffect.cs
- CreateUserWizard.cs
- AudioStateChangedEventArgs.cs
- ProgressPage.cs
- DbParameterCollectionHelper.cs
- LinqExpressionNormalizer.cs
- ProcessManager.cs
- AdapterDictionary.cs
- PreservationFileReader.cs
- CrossAppDomainChannel.cs
- BasicExpandProvider.cs
- WebBrowser.cs
- HttpVersion.cs
- Transactions.cs
- Int16KeyFrameCollection.cs
- RemotingConfiguration.cs
- PropertyPushdownHelper.cs
- ListBoxAutomationPeer.cs
- ButtonPopupAdapter.cs
- BindingBase.cs
- PrincipalPermission.cs
- ByteKeyFrameCollection.cs