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
- ObjectKeyFrameCollection.cs
- Item.cs
- RangeValuePattern.cs
- UnescapedXmlDiagnosticData.cs
- DesignParameter.cs
- Effect.cs
- ProfilePropertyNameValidator.cs
- HighlightVisual.cs
- XPathChildIterator.cs
- XamlStream.cs
- EntityCommand.cs
- StrokeRenderer.cs
- ArrayExtension.cs
- RoutedEventConverter.cs
- CheckBox.cs
- StylusOverProperty.cs
- HtmlElementErrorEventArgs.cs
- APCustomTypeDescriptor.cs
- DataRowView.cs
- ReflectEventDescriptor.cs
- IItemContainerGenerator.cs
- XmlnsPrefixAttribute.cs
- SqlFunctionAttribute.cs
- GeneratedContractType.cs
- UidManager.cs
- DataControlLinkButton.cs
- MetadataArtifactLoaderCompositeResource.cs
- AttachInfo.cs
- TypeResolvingOptionsAttribute.cs
- MbpInfo.cs
- CapacityStreamGeometryContext.cs
- _ConnectOverlappedAsyncResult.cs
- OptimalBreakSession.cs
- MediaTimeline.cs
- Int64AnimationUsingKeyFrames.cs
- TrackingServices.cs
- InheritedPropertyDescriptor.cs
- FlowDocumentReaderAutomationPeer.cs
- BinaryKeyIdentifierClause.cs
- WebBrowserHelper.cs
- QualifiedCellIdBoolean.cs
- ValueUnavailableException.cs
- Component.cs
- VisualBasicSettings.cs
- ScheduleChanges.cs
- SplitContainer.cs
- GridViewRowPresenter.cs
- XmlC14NWriter.cs
- CodeVariableReferenceExpression.cs
- Int16Converter.cs
- Collection.cs
- FontDifferentiator.cs
- MetafileHeaderWmf.cs
- XmlQueryContext.cs
- PropertyMapper.cs
- SchemaTableColumn.cs
- CryptoStream.cs
- Formatter.cs
- DataGridViewCell.cs
- EqualityArray.cs
- CreateRefExpr.cs
- ContentControl.cs
- ConfigXmlText.cs
- MetricEntry.cs
- RelationshipConverter.cs
- XappLauncher.cs
- Bidi.cs
- OrderPreservingSpoolingTask.cs
- ReadOnlyDataSource.cs
- VirtualizingPanel.cs
- ComponentSerializationService.cs
- SoapInteropTypes.cs
- TypeBuilderInstantiation.cs
- _LocalDataStoreMgr.cs
- ListDictionary.cs
- Error.cs
- RIPEMD160.cs
- ImageCodecInfoPrivate.cs
- ImagingCache.cs
- ThemeConfigurationDialog.cs
- CallSiteHelpers.cs
- XamlInterfaces.cs
- ExpressionList.cs
- EntityDataSourceState.cs
- DataGrid.cs
- SendAgentStatusRequest.cs
- HandledEventArgs.cs
- NetStream.cs
- ReceiveMessageRecord.cs
- FirstMatchCodeGroup.cs
- _BaseOverlappedAsyncResult.cs
- MouseEventArgs.cs
- AssemblyAttributesGoHere.cs
- GridSplitterAutomationPeer.cs
- SizeLimitedCache.cs
- RuntimeHelpers.cs
- Environment.cs
- WebPartManagerInternals.cs
- XXXInfos.cs
- XsltConvert.cs