Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DynamicMethod.cs
- ReadOnlyPropertyMetadata.cs
- CompletionProxy.cs
- DrawingCollection.cs
- LinqDataSource.cs
- Pen.cs
- SHA1CryptoServiceProvider.cs
- PackagingUtilities.cs
- DataSourceXmlSerializationAttribute.cs
- DescriptionAttribute.cs
- PriorityRange.cs
- VectorAnimationBase.cs
- DynamicPropertyReader.cs
- WorkflowItemPresenter.cs
- UncommonField.cs
- DocumentPageView.cs
- Boolean.cs
- Input.cs
- SqlServices.cs
- EntitySqlQueryState.cs
- Function.cs
- StylusDownEventArgs.cs
- WebServiceHostFactory.cs
- DataFieldConverter.cs
- AutomationAttributeInfo.cs
- FormViewRow.cs
- TimeSpanConverter.cs
- SecurityRuntime.cs
- UnmanagedMemoryStreamWrapper.cs
- DocumentOrderComparer.cs
- CustomErrorsSection.cs
- InvariantComparer.cs
- XmlAttributeProperties.cs
- BamlRecordReader.cs
- ContentDisposition.cs
- OletxTransactionHeader.cs
- ConversionHelper.cs
- OracleDataAdapter.cs
- WindowsAltTab.cs
- ReferenceEqualityComparer.cs
- CounterCreationDataCollection.cs
- ColumnResizeAdorner.cs
- SQLUtility.cs
- SimpleBitVector32.cs
- HttpProfileBase.cs
- ScrollPattern.cs
- TaskbarItemInfo.cs
- IconConverter.cs
- BitmapDecoder.cs
- MainMenu.cs
- AssemblyNameProxy.cs
- DesigntimeLicenseContext.cs
- HtmlFormParameterWriter.cs
- SiteMapNodeItem.cs
- Stylesheet.cs
- XPathConvert.cs
- ProjectionCamera.cs
- MasterPageParser.cs
- DynamicPropertyReader.cs
- ISCIIEncoding.cs
- ParseElementCollection.cs
- WebPartDescriptionCollection.cs
- COM2ExtendedBrowsingHandler.cs
- TrustManagerPromptUI.cs
- SmtpMail.cs
- DataContract.cs
- ExceptionValidationRule.cs
- ApplicationId.cs
- UrlAuthorizationModule.cs
- StyleBamlTreeBuilder.cs
- DBCommand.cs
- PhysicalOps.cs
- SRGSCompiler.cs
- ListBoxItemAutomationPeer.cs
- PriorityChain.cs
- TypeSchema.cs
- UnicodeEncoding.cs
- Effect.cs
- SecUtil.cs
- AspCompat.cs
- BinaryObjectReader.cs
- CompilerTypeWithParams.cs
- UInt16.cs
- TreeViewBindingsEditorForm.cs
- ErrorView.xaml.cs
- DateTimePickerDesigner.cs
- COM2TypeInfoProcessor.cs
- DataFormats.cs
- XmlCodeExporter.cs
- XmlValidatingReader.cs
- DocumentationServerProtocol.cs
- DesignerView.xaml.cs
- HotSpotCollectionEditor.cs
- ResponseStream.cs
- EdmType.cs
- SoapTransportImporter.cs
- Crypto.cs
- GlyphsSerializer.cs
- ResourceLoader.cs
- XmlWriterTraceListener.cs