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
- GraphicsPath.cs
- SapiInterop.cs
- DispatcherProcessingDisabled.cs
- XmlNodeChangedEventManager.cs
- ObjectItemCollection.cs
- FileDetails.cs
- DesignRelationCollection.cs
- PtsPage.cs
- BookmarkUndoUnit.cs
- TraceSection.cs
- TextLineResult.cs
- NameValueSectionHandler.cs
- MDIWindowDialog.cs
- PerfCounters.cs
- PageParserFilter.cs
- TriggerBase.cs
- MetadataFile.cs
- WindowsIPAddress.cs
- BlobPersonalizationState.cs
- AttributeQuery.cs
- XamlClipboardData.cs
- SecurityNegotiationException.cs
- PrintDialog.cs
- ScriptMethodAttribute.cs
- ArrayListCollectionBase.cs
- SecurityState.cs
- CodeAttributeArgument.cs
- OleTxTransaction.cs
- HtmlImage.cs
- RightsManagementPermission.cs
- DataBindingList.cs
- TextParaClient.cs
- Vertex.cs
- GenericWebPart.cs
- SharedUtils.cs
- DropShadowBitmapEffect.cs
- EntityTemplateUserControl.cs
- SHA512Managed.cs
- CompletedAsyncResult.cs
- CheckBoxList.cs
- RadialGradientBrush.cs
- UTF8Encoding.cs
- OuterGlowBitmapEffect.cs
- InternalConfigRoot.cs
- Privilege.cs
- CompiledQuery.cs
- TextBoxAutoCompleteSourceConverter.cs
- OutputScope.cs
- _DigestClient.cs
- FlowDocumentPaginator.cs
- WebConfigurationFileMap.cs
- Collection.cs
- TextSelectionProcessor.cs
- XNameConverter.cs
- HostExecutionContextManager.cs
- TextSpanModifier.cs
- ApplyTemplatesAction.cs
- ScriptManagerProxy.cs
- TextTreeTextNode.cs
- MD5Cng.cs
- _FixedSizeReader.cs
- GeometryModel3D.cs
- EmptyQuery.cs
- SpeakCompletedEventArgs.cs
- TimeZone.cs
- JsonReaderWriterFactory.cs
- FlowDocumentReaderAutomationPeer.cs
- ToolStripMenuItem.cs
- Rotation3DAnimationUsingKeyFrames.cs
- EntitySetDataBindingList.cs
- XmlDataCollection.cs
- TreeBuilder.cs
- RightNameExpirationInfoPair.cs
- CodeRegionDirective.cs
- AudioException.cs
- CustomPopupPlacement.cs
- BindingManagerDataErrorEventArgs.cs
- FixedTextSelectionProcessor.cs
- TemplateContentLoader.cs
- CodeTypeParameter.cs
- SortQuery.cs
- Calendar.cs
- DeferredTextReference.cs
- WindowsScroll.cs
- XmlSchemaObjectTable.cs
- NotCondition.cs
- SystemDiagnosticsSection.cs
- RenamedEventArgs.cs
- SharedUtils.cs
- SystemEvents.cs
- ByeMessageApril2005.cs
- CookielessHelper.cs
- StrongName.cs
- DbProviderConfigurationHandler.cs
- JoinTreeSlot.cs
- JoinCqlBlock.cs
- EditorBrowsableAttribute.cs
- FileLevelControlBuilderAttribute.cs
- AtomParser.cs
- SerializationInfoEnumerator.cs