本文整理汇总了C#中System.Data.Services.Providers.ResourceType.RemoveKeyProperties方法的典型用法代码示例。如果您正苦于以下问题:C# ResourceType.RemoveKeyProperties方法的具体用法?C# ResourceType.RemoveKeyProperties怎么用?C# ResourceType.RemoveKeyProperties使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Data.Services.Providers.ResourceType
的用法示例。
在下文中一共展示了ResourceType.RemoveKeyProperties方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: BuildTypeProperties
/// <summary>
/// Populates the metadata for the properties of the given resource type
/// </summary>
/// <param name="parentResourceType">resource type whose properties metadata needs to be populated</param>
/// <param name="knownTypes">list of known types</param>
/// <param name="childTypes">list of already known types and their immediate children</param>
/// <param name="unvisitedTypes">list of unvisited type</param>
/// <param name="entitySets">Available entity sets.</param>
private static void BuildTypeProperties(
ResourceType parentResourceType,
IDictionary<Type, ResourceType> knownTypes,
IDictionary<ResourceType, List<ResourceType>> childTypes,
Queue<ResourceType> unvisitedTypes,
IEnumerable<ResourceSet> entitySets)
{
Debug.Assert(parentResourceType != null, "parentResourceType != null");
Debug.Assert(knownTypes != null, "knownTypes != null");
Debug.Assert(unvisitedTypes != null, "unvisitedTypes != null");
Debug.Assert(entitySets != null, "entitySets != null");
BindingFlags bindingFlags = WebUtil.PublicInstanceBindingFlags;
// For non root types, we should only look for properties that are declared for this type
if (parentResourceType.BaseType != null)
{
bindingFlags = bindingFlags | BindingFlags.DeclaredOnly;
}
HashSet<string> propertiesToBeIgnored = new HashSet<string>(IgnorePropertiesAttribute.GetProperties(parentResourceType.InstanceType, false /*inherit*/, bindingFlags), StringComparer.Ordinal);
Debug.Assert(parentResourceType.IsOpenType == false, "ReflectionServiceProvider does not support Open types.");
HashSet<string> etagPropertyNames = new HashSet<string>(LoadETagProperties(parentResourceType), StringComparer.Ordinal);
ResourceKeyKind keyKind = (ResourceKeyKind)Int32.MaxValue;
PropertyInfo[] properties = parentResourceType.InstanceType.GetProperties(bindingFlags);
foreach (PropertyInfo property in properties)
{
// Ignore the properties which are specified in the IgnoreProperties attribute
if (propertiesToBeIgnored.Contains(property.Name))
{
continue;
}
if (property.CanRead && property.GetIndexParameters().Length == 0)
{
ResourcePropertyKind kind = (ResourcePropertyKind)(-1);
ResourceKeyKind currentKeyKind = (ResourceKeyKind)(-1);
ResourceType resourceType;
Type resourcePropertyType = property.PropertyType;
ResourceSet container = null;
bool collection = false;
if (!TryGetType(knownTypes, resourcePropertyType, out resourceType))
{
Type collectionType = GetIEnumerableElement(property.PropertyType);
if (collectionType != null)
{
TryGetType(knownTypes, collectionType, out resourceType);
// Even if the above method returns false, we should set the
// following variable appropriately, so that we can use them below
collection = true;
resourcePropertyType = collectionType;
}
}
if (resourceType != null)
{
#region Already Known Type
if (resourceType.ResourceTypeKind == ResourceTypeKind.Primitive)
{
// Check for key property only on root types, since keys must be defined on the root types
if (parentResourceType.BaseType == null && parentResourceType.ResourceTypeKind == ResourceTypeKind.EntityType && IsPropertyKeyProperty(property, out currentKeyKind))
{
if ((int)currentKeyKind < (int)keyKind)
{
if (parentResourceType.KeyProperties.Count != 0)
{
// Remove the existing property as key property - mark it as non key property
parentResourceType.RemoveKeyProperties();
}
keyKind = currentKeyKind;
kind = ResourcePropertyKind.Key | ResourcePropertyKind.Primitive;
}
else if ((int)currentKeyKind == (int)keyKind)
{
Debug.Assert(currentKeyKind == ResourceKeyKind.AttributedKey, "This is the only way of specifying composite keys");
kind = ResourcePropertyKind.Key | ResourcePropertyKind.Primitive;
}
else
{
kind = ResourcePropertyKind.Primitive;
}
}
else
{
kind = ResourcePropertyKind.Primitive;
}
}
//.........这里部分代码省略.........
示例2: BuildTypeProperties
private static void BuildTypeProperties(ResourceType parentResourceType, IDictionary<Type, ResourceType> knownTypes, IDictionary<ResourceType, List<ResourceType>> childTypes, Queue<ResourceType> unvisitedTypes, IEnumerable<ResourceSet> entitySets)
{
BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance;
if (parentResourceType.BaseType != null)
{
bindingFlags |= BindingFlags.DeclaredOnly;
}
HashSet<string> set = new HashSet<string>(IgnorePropertiesAttribute.GetProperties(parentResourceType.InstanceType, false, bindingFlags), StringComparer.Ordinal);
HashSet<string> source = new HashSet<string>(LoadETagProperties(parentResourceType), StringComparer.Ordinal);
ResourceKeyKind kind = (ResourceKeyKind) 0x7fffffff;
PropertyInfo[] properties = parentResourceType.InstanceType.GetProperties(bindingFlags);
if (!properties.Any<PropertyInfo>() && (parentResourceType.BaseType == null))
{
throw new NotSupportedException(System.Data.Services.Strings.ReflectionProvider_ResourceTypeHasNoPublicallyVisibleProperties(parentResourceType.FullName));
}
foreach (PropertyInfo info in properties)
{
if (!set.Contains(info.Name))
{
ResourceType collectionResourceType;
if (!info.CanRead || (info.GetIndexParameters().Length != 0))
{
throw new InvalidOperationException(System.Data.Services.Strings.ReflectionProvider_InvalidProperty(info.Name, parentResourceType.FullName));
}
ResourcePropertyKind collection = (ResourcePropertyKind)(-1);
Type propertyType = info.PropertyType;
bool flag = false;
if (!BaseServiceProvider.TryGetType(knownTypes, propertyType, out collectionResourceType))
{
Type iEnumerableElement = BaseServiceProvider.GetIEnumerableElement(info.PropertyType);
if (iEnumerableElement != null)
{
BaseServiceProvider.TryGetType(knownTypes, iEnumerableElement, out collectionResourceType);
flag = true;
propertyType = iEnumerableElement;
}
}
if (collectionResourceType != null)
{
if (collectionResourceType.ResourceTypeKind == ResourceTypeKind.Primitive)
{
if (flag)
{
collection = ResourcePropertyKind.Collection;
}
else
{
ResourceKeyKind kind3;
if (((parentResourceType.BaseType == null) && (parentResourceType.ResourceTypeKind == ResourceTypeKind.EntityType)) && IsPropertyKeyProperty(info, out kind3))
{
if (kind3 < kind)
{
if (parentResourceType.KeyProperties.Count != 0)
{
parentResourceType.RemoveKeyProperties();
}
kind = kind3;
collection = ResourcePropertyKind.Key | ResourcePropertyKind.Primitive;
}
else if (kind3 == kind)
{
collection = ResourcePropertyKind.Key | ResourcePropertyKind.Primitive;
}
else
{
collection = ResourcePropertyKind.Primitive;
}
}
else
{
collection = ResourcePropertyKind.Primitive;
}
}
}
else if (collectionResourceType.ResourceTypeKind == ResourceTypeKind.ComplexType)
{
collection = flag ? ResourcePropertyKind.Collection : ResourcePropertyKind.ComplexType;
}
else if (collectionResourceType.ResourceTypeKind == ResourceTypeKind.EntityType)
{
collection = flag ? ResourcePropertyKind.ResourceSetReference : ResourcePropertyKind.ResourceReference;
}
}
else
{
collectionResourceType = IsEntityOrComplexType(propertyType, knownTypes, childTypes, unvisitedTypes);
if (collectionResourceType != null)
{
if (collectionResourceType.ResourceTypeKind == ResourceTypeKind.ComplexType)
{
if (flag)
{
if (BaseServiceProvider.GetIEnumerableElement(propertyType) != null)
{
throw new InvalidOperationException(System.Data.Services.Strings.ReflectionProvider_CollectionOfCollectionProperty(info.Name, parentResourceType.FullName));
}
collection = ResourcePropertyKind.Collection;
}
else
{
//.........这里部分代码省略.........