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
- XhtmlBasicImageAdapter.cs
- KeyInstance.cs
- State.cs
- OracleDataReader.cs
- DriveNotFoundException.cs
- mediaeventargs.cs
- OleDbPermission.cs
- ControlBuilderAttribute.cs
- OpenFileDialog.cs
- BinaryUtilClasses.cs
- PnrpPermission.cs
- AndCondition.cs
- FontUnit.cs
- ExtensionDataObject.cs
- RenderData.cs
- ConfigurationSectionGroupCollection.cs
- AttributeEmitter.cs
- TextTreeRootTextBlock.cs
- PrimitiveSchema.cs
- ConnectionConsumerAttribute.cs
- ControlCollection.cs
- HttpFileCollection.cs
- ServiceSettingsResponseInfo.cs
- SuspendDesigner.cs
- SimpleLine.cs
- XmlDocumentType.cs
- cookie.cs
- Metafile.cs
- PolyQuadraticBezierSegment.cs
- EncoderBestFitFallback.cs
- FixedSOMPageConstructor.cs
- XmlSchemaSimpleTypeList.cs
- AppDomainAttributes.cs
- KeyInterop.cs
- SafeNativeMethodsCLR.cs
- PseudoWebRequest.cs
- DynamicILGenerator.cs
- TextDecorationCollection.cs
- CheckBox.cs
- ComponentConverter.cs
- TypeConverterHelper.cs
- SqlMetaData.cs
- StatusStrip.cs
- DesignerCategoryAttribute.cs
- StrokeCollectionDefaultValueFactory.cs
- TimeSpanValidatorAttribute.cs
- InvalidDataContractException.cs
- MetadataPropertyAttribute.cs
- RadioButton.cs
- HashFinalRequest.cs
- Rfc2898DeriveBytes.cs
- BuildProviderAppliesToAttribute.cs
- SerialStream.cs
- RichTextBox.cs
- InstanceData.cs
- GlobalItem.cs
- ResourcesBuildProvider.cs
- DefaultValueAttribute.cs
- StateDesigner.LayoutSelectionGlyph.cs
- EventDescriptor.cs
- Comparer.cs
- DependencyPropertyValueSerializer.cs
- DetailsViewDeletedEventArgs.cs
- CharAnimationUsingKeyFrames.cs
- Hex.cs
- AxDesigner.cs
- DrawingBrush.cs
- DataGridCellClipboardEventArgs.cs
- MDIClient.cs
- GacUtil.cs
- SystemColors.cs
- ShutDownListener.cs
- CollectionConverter.cs
- TreeViewEvent.cs
- DrawingState.cs
- SqlRowUpdatedEvent.cs
- URL.cs
- IntegerValidator.cs
- AdPostCacheSubstitution.cs
- TimeEnumHelper.cs
- VoiceObjectToken.cs
- Interlocked.cs
- GeneralEndpointIdentity.cs
- Int64AnimationBase.cs
- RoleBoolean.cs
- ConnectionInterfaceCollection.cs
- PeerCollaboration.cs
- Attributes.cs
- UnitySerializationHolder.cs
- LogExtentCollection.cs
- BulletDecorator.cs
- StringWriter.cs
- HMACSHA256.cs
- SerializationSectionGroup.cs
- PagePropertiesChangingEventArgs.cs
- ObjectViewFactory.cs
- TreeView.cs
- SQLInt16.cs
- EntitySqlQueryCacheKey.cs
- TypeUnloadedException.cs