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
- SizeKeyFrameCollection.cs
- FixedFlowMap.cs
- LinkButton.cs
- PersonalizationStateQuery.cs
- KeyGestureValueSerializer.cs
- keycontainerpermission.cs
- DBBindings.cs
- Material.cs
- iisPickupDirectory.cs
- ListViewUpdateEventArgs.cs
- ProviderUtil.cs
- ApplicationFileCodeDomTreeGenerator.cs
- XmlWriterTraceListener.cs
- Cast.cs
- HtmlTitle.cs
- XPathScanner.cs
- SafeProcessHandle.cs
- MetadataCache.cs
- WebPartMenu.cs
- xsdvalidator.cs
- DbParameterHelper.cs
- TypeExtensionSerializer.cs
- TextAction.cs
- NegotiationTokenAuthenticatorState.cs
- DrawItemEvent.cs
- listviewsubitemcollectioneditor.cs
- Parser.cs
- ReflectionPermission.cs
- LocalizableAttribute.cs
- ClientOptions.cs
- SubclassTypeValidator.cs
- ResourceReferenceExpression.cs
- DataListItemEventArgs.cs
- TargetInvocationException.cs
- PropertyDescriptorGridEntry.cs
- OleDbEnumerator.cs
- Point4DValueSerializer.cs
- HealthMonitoringSectionHelper.cs
- UiaCoreTypesApi.cs
- TableRow.cs
- MutexSecurity.cs
- WebPartManagerInternals.cs
- Transform3DGroup.cs
- DbParameterCollectionHelper.cs
- StylusPlugin.cs
- SqlGenericUtil.cs
- configsystem.cs
- HostedElements.cs
- UrlMappingCollection.cs
- AssignDesigner.xaml.cs
- VisualBrush.cs
- Stylesheet.cs
- ObjectConverter.cs
- DataSourceDesigner.cs
- ObjRef.cs
- TreeViewItemAutomationPeer.cs
- DrawingServices.cs
- BindToObject.cs
- ConditionCollection.cs
- MenuTracker.cs
- WebPartDisplayModeEventArgs.cs
- StaticContext.cs
- ImageListUtils.cs
- SymmetricKey.cs
- AssociationEndMember.cs
- InvalidDataException.cs
- DeclarationUpdate.cs
- BridgeDataReader.cs
- CoTaskMemUnicodeSafeHandle.cs
- BamlRecordReader.cs
- SizeKeyFrameCollection.cs
- SafeNativeMethods.cs
- DataException.cs
- JavascriptXmlWriterWrapper.cs
- ExtenderProviderService.cs
- EntityClientCacheKey.cs
- sapiproxy.cs
- DataBindingHandlerAttribute.cs
- XmlIncludeAttribute.cs
- LabelInfo.cs
- FileFormatException.cs
- CodeDomLocalizationProvider.cs
- ContextStack.cs
- BaseTemplateCodeDomTreeGenerator.cs
- QilParameter.cs
- ACE.cs
- GridViewSortEventArgs.cs
- Parameter.cs
- TransformerConfigurationWizardBase.cs
- PersonalizableTypeEntry.cs
- WorkflowEventArgs.cs
- DataSourceControl.cs
- TextTreeExtractElementUndoUnit.cs
- RecognizedWordUnit.cs
- BehaviorEditorPart.cs
- ApplicationTrust.cs
- ZipIOExtraFieldPaddingElement.cs
- ConfigurationManagerInternal.cs
- GridViewRowCollection.cs
- HttpProfileGroupBase.cs