本文整理汇总了C#中IEdmModel类的典型用法代码示例。如果您正苦于以下问题:C# IEdmModel类的具体用法?C# IEdmModel怎么用?C# IEdmModel使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
IEdmModel类属于命名空间,在下文中一共展示了IEdmModel类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: LoadServiceModel
//-----------------------------------------------------------------------------------------------------------------------------------------------------
private IEdmModel LoadServiceModel()
{
_edmModel = LoadModelFromService(this.GetMetadataUri());
_remoteEntityTypesNamespace = _edmModel.GetEntityNamespace();
return _edmModel;
}
示例2: ResolveNavigationSource
/// <summary>
/// Resolve navigation source from model.
/// </summary>
/// <param name="model">The model to be used.</param>
/// <param name="identifier">The identifier to be resolved.</param>
/// <returns>The resolved navigation source.</returns>
public virtual IEdmNavigationSource ResolveNavigationSource(IEdmModel model, string identifier)
{
if (EnableCaseInsensitive)
{
IEdmEntityContainer container = model.EntityContainer;
if (container == null)
{
return null;
}
var result = container.Elements.OfType<IEdmNavigationSource>()
.Where(source => string.Equals(identifier, source.Name, StringComparison.OrdinalIgnoreCase)).ToList();
if (result.Count == 1)
{
return result.Single();
}
else if (result.Count > 1)
{
throw new ODataException(Strings.UriParserMetadata_MultipleMatchingNavigationSourcesFound(identifier));
}
}
return model.FindDeclaredNavigationSource(identifier);
}
示例3: MapODataRoute
public static void MapODataRoute(this HttpRouteCollection routes, string routeName, string routePrefix, IEdmModel model,
IODataPathHandler pathHandler, IEnumerable<IODataRoutingConvention> routingConventions, ODataBatchHandler batchHandler)
{
if (routes == null)
{
throw Error.ArgumentNull("routes");
}
if (!String.IsNullOrEmpty(routePrefix))
{
int prefixLastIndex = routePrefix.Length - 1;
if (routePrefix[prefixLastIndex] == '/')
{
// Remove the last trailing slash if it has one.
routePrefix = routePrefix.Substring(0, routePrefix.Length - 1);
}
}
if (batchHandler != null)
{
batchHandler.ODataRouteName = routeName;
string batchTemplate = String.IsNullOrEmpty(routePrefix) ? ODataRouteConstants.Batch : routePrefix + '/' + ODataRouteConstants.Batch;
routes.MapHttpBatchRoute(routeName + "Batch", batchTemplate, batchHandler);
}
ODataPathRouteConstraint routeConstraint = new ODataPathRouteConstraint(pathHandler, model, routeName, routingConventions);
routes.Add(routeName, new ODataRoute(routePrefix, routeConstraint));
}
示例4: BuildCustomers
private static void BuildCustomers(IEdmModel model)
{
IEdmEntityType customerType = model.SchemaElements.OfType<IEdmEntityType>().First(e => e.Name == "Customer");
IEdmEntityObject[] untypedCustomers = new IEdmEntityObject[6];
for (int i = 1; i <= 5; i++)
{
dynamic untypedCustomer = new EdmEntityObject(customerType);
untypedCustomer.ID = i;
untypedCustomer.Name = string.Format("Name {0}", i);
untypedCustomer.SSN = "SSN-" + i + "-" + (100 + i);
untypedCustomers[i-1] = untypedCustomer;
}
// create a special customer for "PATCH"
dynamic customer = new EdmEntityObject(customerType);
customer.ID = 6;
customer.Name = "Name 6";
customer.SSN = "SSN-6-T-006";
untypedCustomers[5] = customer;
IEdmCollectionTypeReference entityCollectionType =
new EdmCollectionTypeReference(
new EdmCollectionType(
new EdmEntityTypeReference(customerType, isNullable: false)));
Customers = new EdmEntityObjectCollection(entityCollectionType, untypedCustomers.ToList());
}
示例5: ODataQueryContext
/// <summary>
/// Constructs an instance of <see cref="ODataQueryContext"/> with EdmModel and Entity's CLR type.
/// By default we assume the full name of the CLR type is used for the name for the EntitySet stored in the model.
/// </summary>
/// <param name="model">The EdmModel that includes the Entity and EntitySet information.</param>
/// <param name="entityClrType">The entity's CLR type information.</param>
public ODataQueryContext(IEdmModel model, Type entityClrType)
{
if (model == null)
{
throw Error.ArgumentNull("model");
}
if (entityClrType == null)
{
throw Error.ArgumentNull("entityClrType");
}
// check if we can successfully retrieve an entitySet from the model with the given entityClrType
IEnumerable<IEdmEntityContainer> containers = model.EntityContainers();
List<IEdmEntitySet> entities = new List<IEdmEntitySet>();
foreach (IEdmEntityContainer container in containers)
{
entities.AddRange(container.EntitySets().Where(s => s.ElementType.IsEquivalentTo(model.GetEdmType(entityClrType))));
}
if (entities == null || entities.Count == 0)
{
throw Error.InvalidOperation(SRResources.EntitySetNotFound, entityClrType.FullName);
}
if (entities.Count > 1)
{
throw Error.InvalidOperation(SRResources.MultipleEntitySetMatchedClrType, entityClrType.FullName);
}
Model = model;
EntityClrType = entityClrType;
EntitySet = entities[0];
}
示例6: CreateResolver
public ODataUriResolver CreateResolver(IEdmModel model)
{
ODataUriResolver resolver;
if (UnqualifiedNameCall && EnumPrefixFree)
{
resolver = new UnqualifiedCallAndEnumPrefixFreeResolver();
}
else if (UnqualifiedNameCall)
{
resolver = new UnqualifiedODataUriResolver();
}
else if (EnumPrefixFree)
{
resolver = new StringAsEnumResolver();
}
else if (AlternateKeys)
{
resolver = new AlternateKeysODataUriResolver(model);
}
else
{
resolver = new ODataUriResolver();
}
resolver.EnableCaseInsensitive = CaseInsensitive;
return resolver;
}
示例7: ValidateRestrictions
private static void ValidateRestrictions(SelectExpandClause selectExpandClause, IEdmModel edmModel)
{
foreach (SelectItem selectItem in selectExpandClause.SelectedItems)
{
ExpandedNavigationSelectItem expandItem = selectItem as ExpandedNavigationSelectItem;
if (expandItem != null)
{
NavigationPropertySegment navigationSegment = (NavigationPropertySegment)expandItem.PathToNavigationProperty.LastSegment;
IEdmNavigationProperty navigationProperty = navigationSegment.NavigationProperty;
if (EdmLibHelpers.IsNotExpandable(navigationProperty, edmModel))
{
throw new ODataException(Error.Format(SRResources.NotExpandablePropertyUsedInExpand, navigationProperty.Name));
}
ValidateRestrictions(expandItem.SelectAndExpand, edmModel);
}
PathSelectItem pathSelectItem = selectItem as PathSelectItem;
if (pathSelectItem != null)
{
ODataPathSegment segment = pathSelectItem.SelectedPath.LastSegment;
NavigationPropertySegment navigationPropertySegment = segment as NavigationPropertySegment;
if (navigationPropertySegment != null)
{
IEdmNavigationProperty navigationProperty = navigationPropertySegment.NavigationProperty;
if (EdmLibHelpers.IsNotNavigable(navigationProperty, edmModel))
{
throw new ODataException(Error.Format(SRResources.NotNavigablePropertyUsedInNavigation, navigationProperty.Name));
}
}
}
}
}
示例8: JsonFullMetadataLevel
/// <summary>
/// Constructs a new <see cref="JsonFullMetadataLevel"/>.
/// </summary>
/// <param name="metadataDocumentUri">The metadata document uri from the writer settings.</param>
/// <param name="model">The Edm model.</param>
internal JsonFullMetadataLevel(Uri metadataDocumentUri, IEdmModel model)
{
Debug.Assert(model != null, "model != null");
this.metadataDocumentUri = metadataDocumentUri;
this.model = model;
}
示例9: SetEdmModel
/// <summary>
/// Sets the given EdmModel with the configuration.
/// </summary>
/// <param name="configuration">Configuration to be updated.</param>
/// <param name="model">The EdmModel to update.</param>
public static void SetEdmModel(this HttpConfiguration configuration, IEdmModel model)
{
if (configuration == null)
{
throw Error.ArgumentNull("configuration");
}
if (model == null)
{
throw Error.ArgumentNull("model");
}
if (configuration.GetODataFormatter() != null)
{
throw Error.NotSupported(
SRResources.EdmModelMismatch,
typeof(IEdmModel).Name,
typeof(ODataMediaTypeFormatter).Name,
"SetODataFormatter");
}
configuration.Properties.AddOrUpdate(EdmModelKey, model, (a, b) =>
{
return model;
});
}
示例10: ResolveAndValidateTypeNameForValue
/// <summary>
/// Resolves and validates the Edm type for the given <paramref name="value"/>.
/// </summary>
/// <param name="model">The model to use.</param>
/// <param name="typeReferenceFromMetadata">The type inferred from the model or null if the model is not a user model.</param>
/// <param name="value">The value in question to resolve the type for.</param>
/// <param name="isOpenProperty">true if the type name belongs to an open property, false otherwise.</param>
/// <returns>A type for the <paramref name="value"/> or null if no metadata is available.</returns>
internal static IEdmTypeReference ResolveAndValidateTypeNameForValue(IEdmModel model, IEdmTypeReference typeReferenceFromMetadata, ODataValue value, bool isOpenProperty)
{
Debug.Assert(model != null, "model != null");
Debug.Assert(value != null, "value != null");
ODataPrimitiveValue primitiveValue = value as ODataPrimitiveValue;
if (primitiveValue != null)
{
Debug.Assert(primitiveValue.Value != null, "primitiveValue.Value != null");
return EdmLibraryExtensions.GetPrimitiveTypeReference(primitiveValue.Value.GetType());
}
ODataComplexValue complexValue = value as ODataComplexValue;
if (complexValue != null)
{
return ResolveAndValidateTypeFromNameAndMetadata(model, typeReferenceFromMetadata, complexValue.TypeName, EdmTypeKind.Complex, isOpenProperty);
}
ODataEnumValue enumValue = value as ODataEnumValue;
if (enumValue != null)
{
return ResolveAndValidateTypeFromNameAndMetadata(model, typeReferenceFromMetadata, enumValue.TypeName, EdmTypeKind.Enum, isOpenProperty);
}
ODataCollectionValue collectionValue = (ODataCollectionValue)value;
return ResolveAndValidateTypeFromNameAndMetadata(model, typeReferenceFromMetadata, collectionValue.TypeName, EdmTypeKind.Collection, isOpenProperty);
}
示例11: ResolveAndValidateTypeName
/// <summary>
/// Validates a type name to ensure that it's not an empty string and resolves it against the provided <paramref name="model"/>.
/// </summary>
/// <param name="model">The model to use.</param>
/// <param name="typeName">The type name to validate.</param>
/// <param name="expectedTypeKind">The expected type kind for the given type name.</param>
/// <returns>The type with the given name and kind if a user model was available, otherwise null.</returns>
internal static IEdmType ResolveAndValidateTypeName(IEdmModel model, string typeName, EdmTypeKind expectedTypeKind)
{
Debug.Assert(model != null, "model != null");
if (typeName == null)
{
// if we have metadata, the type name of an entry must not be null
if (model.IsUserModel())
{
throw new ODataException(Strings.WriterValidationUtils_MissingTypeNameWithMetadata);
}
return null;
}
if (typeName.Length == 0)
{
throw new ODataException(Strings.ValidationUtils_TypeNameMustNotBeEmpty);
}
if (!model.IsUserModel())
{
return null;
}
// If we do have metadata, lookup the type and translate it to a type.
IEdmType resolvedType = MetadataUtils.ResolveTypeNameForWrite(model, typeName);
if (resolvedType == null)
{
throw new ODataException(Strings.ValidationUtils_UnrecognizedTypeName(typeName));
}
ValidationUtils.ValidateTypeKind(resolvedType.TypeKind, expectedTypeKind, resolvedType.ODataFullName());
return resolvedType;
}
示例12: GetOperationsInEntry
/// <summary>
/// Returns a hash set of operation imports (actions and functions) in the given entry.
/// </summary>
/// <param name="entry">The entry in question.</param>
/// <param name="model">The edm model to resolve operation imports.</param>
/// <param name="metadataDocumentUri">The metadata document uri.</param>
/// <returns>The hash set of operation imports (actions and functions) in the given entry.</returns>
private static HashSet<IEdmOperation> GetOperationsInEntry(ODataEntry entry, IEdmModel model, Uri metadataDocumentUri)
{
Debug.Assert(entry != null, "entry != null");
Debug.Assert(model != null, "model != null");
Debug.Assert(metadataDocumentUri != null && metadataDocumentUri.IsAbsoluteUri, "metadataDocumentUri != null && metadataDocumentUri.IsAbsoluteUri");
HashSet<IEdmOperation> edmOperationImportsInEntry = new HashSet<IEdmOperation>(EqualityComparer<IEdmOperation>.Default);
IEnumerable<ODataOperation> operations = ODataUtilsInternal.ConcatEnumerables((IEnumerable<ODataOperation>)entry.NonComputedActions, (IEnumerable<ODataOperation>)entry.NonComputedFunctions);
if (operations != null)
{
foreach (ODataOperation operation in operations)
{
Debug.Assert(operation.Metadata != null, "operation.Metadata != null");
string operationMetadataString = UriUtils.UriToString(operation.Metadata);
Debug.Assert(
ODataJsonLightUtils.IsMetadataReferenceProperty(operationMetadataString),
"ODataJsonLightUtils.IsMetadataReferenceProperty(operationMetadataString)");
Debug.Assert(
operationMetadataString[0] == ODataConstants.ContextUriFragmentIndicator || metadataDocumentUri.IsBaseOf(operation.Metadata),
"operationMetadataString[0] == JsonLightConstants.ContextUriFragmentIndicator || metadataDocumentUri.IsBaseOf(operation.Metadata)");
string fullyQualifiedOperationName = ODataJsonLightUtils.GetUriFragmentFromMetadataReferencePropertyName(metadataDocumentUri, operationMetadataString);
IEnumerable<IEdmOperation> edmOperations = model.ResolveOperations(fullyQualifiedOperationName);
if (edmOperations != null)
{
foreach (IEdmOperation edmOperation in edmOperations)
{
edmOperationImportsInEntry.Add(edmOperation);
}
}
}
}
return edmOperationImportsInEntry;
}
示例13: ValidateCount
private static void ValidateCount(ODataPathSegment segment, IEdmModel model)
{
Contract.Assert(segment != null);
Contract.Assert(model != null);
NavigationPathSegment navigationPathSegment = segment as NavigationPathSegment;
if (navigationPathSegment != null)
{
if (EdmLibHelpers.IsNotCountable(navigationPathSegment.NavigationProperty, model))
{
throw new InvalidOperationException(Error.Format(
SRResources.NotCountablePropertyUsedForCount,
navigationPathSegment.NavigationPropertyName));
}
return;
}
PropertyAccessPathSegment propertyAccessPathSegment = segment as PropertyAccessPathSegment;
if (propertyAccessPathSegment != null)
{
if (EdmLibHelpers.IsNotCountable(propertyAccessPathSegment.Property, model))
{
throw new InvalidOperationException(Error.Format(
SRResources.NotCountablePropertyUsedForCount,
propertyAccessPathSegment.PropertyName));
}
}
}
示例14: TryResolve
public static FunctionPathSegment TryResolve(IEnumerable<IEdmFunctionImport> functions, IEdmModel model, string nextSegment)
{
Dictionary<string, string> parameters = null;
IEnumerable<string> parameterNames = null;
if (IsEnclosedInParentheses(nextSegment))
{
string value = nextSegment.Substring(1, nextSegment.Length - 2);
parameters = KeyValueParser.ParseKeys(value);
parameterNames = parameters.Keys;
}
IEdmFunctionImport function = FindBestFunction(functions, parameterNames);
if (function != null)
{
if (GetNonBindingParameters(function).Any())
{
return new FunctionPathSegment(function, model, parameters);
}
else
{
return new FunctionPathSegment(function, model, parameterValues: null);
}
}
return null;
}
示例15: TryBindAsWildcard
/// <summary>
/// Build a wildcard selection item
/// </summary>
/// <param name="tokenIn">the token to bind to a wildcard</param>
/// <param name="model">the model to search for this wildcard</param>
/// <param name="item">the new wildcard selection item, if we found one</param>
/// <returns>true if we successfully bound to a wildcard, false otherwise</returns>
public static bool TryBindAsWildcard(PathSegmentToken tokenIn, IEdmModel model, out SelectItem item)
{
bool isTypeToken = tokenIn.IsNamespaceOrContainerQualified();
bool wildcard = tokenIn.Identifier.EndsWith("*", StringComparison.Ordinal);
if (isTypeToken && wildcard)
{
string namespaceName = tokenIn.Identifier.Substring(0, tokenIn.Identifier.Length - 2);
if (model.DeclaredNamespaces.Any(declaredNamespace => declaredNamespace.Equals(namespaceName, StringComparison.Ordinal)))
{
item = new NamespaceQualifiedWildcardSelectItem(namespaceName);
return true;
}
}
if (tokenIn.Identifier == "*")
{
item = new WildcardSelectItem();
return true;
}
item = null;
return false;
}