Пример #1
0
 private object GetCollectionInstance(ClientPropertyAnnotation property, out bool instanceCreated)
 {
     instanceCreated = false;
     object obj2 = property.GetValue(this.entity);
     if (obj2 != null)
     {
         return obj2;
     }
     instanceCreated = true;
     Type propertyType = property.PropertyType;
     if (BindingEntityInfo.IsDataServiceCollection(propertyType, base.RequestInfo.MaxProtocolVersion))
     {
         object[] args = new object[2];
         args[1] = TrackingMode.None;
         return Activator.CreateInstance(WebUtil.GetDataServiceCollectionOfT(new Type[] { property.EntityCollectionItemType }), args);
     }
     Type c = typeof(List<>).MakeGenericType(new Type[] { property.EntityCollectionItemType });
     if (!propertyType.IsAssignableFrom(c))
     {
         c = propertyType;
     }
     return Activator.CreateInstance(c);
 }
Пример #2
0
 internal static bool TryGetPropertyValue(object source, string sourceProperty, DataServiceProtocolVersion maxProtocolVersion, out BindingPropertyInfo bindingPropertyInfo, out ClientPropertyAnnotation clientProperty, out object propertyValue)
 {
     Type entityType = source.GetType();
     bindingPropertyInfo = GetObservableProperties(entityType, maxProtocolVersion).SingleOrDefault<BindingPropertyInfo>(x => x.PropertyInfo.PropertyName == sourceProperty);
     bool flag = bindingPropertyInfo != null;
     if (!flag)
     {
         clientProperty = GetClientType(entityType, maxProtocolVersion).GetProperty(sourceProperty, true);
         flag = clientProperty != null;
         if (!flag)
         {
             propertyValue = null;
             return flag;
         }
         propertyValue = clientProperty.GetValue(source);
         return flag;
     }
     clientProperty = null;
     propertyValue = bindingPropertyInfo.PropertyInfo.GetValue(source);
     return flag;
 }
Пример #3
0
 private MaterializeAtom ReadPropertyFromAtom(EntityDescriptor box, ClientPropertyAnnotation property)
 {
     MaterializeAtom atom2;
     DataServiceContext source = (DataServiceContext) base.Source;
     bool applyingChanges = source.ApplyingChanges;
     try
     {
         source.ApplyingChanges = true;
         bool flag2 = EntityStates.Deleted == box.State;
         bool instanceCreated = false;
         object instance = null;
         if (property.IsEntityCollection)
         {
             instance = this.GetCollectionInstance(property, out instanceCreated);
         }
         Type type = property.IsEntityCollection ? property.EntityCollectionItemType : property.NullablePropertyType;
         IList results = (IList) Activator.CreateInstance(typeof(List<>).MakeGenericType(new Type[] { type }));
         DataServiceQueryContinuation continuation = null;
         using (MaterializeAtom atom = base.GetMaterializer(this.plan))
         {
             bool flag4 = property.EdmProperty.PropertyKind == EdmPropertyKind.Navigation;
             int num = 0;
             foreach (object obj3 in atom)
             {
                 if (property.IsEntityCollection)
                 {
                     property.SetValue(instance, obj3, this.propertyName, true);
                     results.Add(obj3);
                 }
                 else if (property.IsPrimitiveOrComplexCollection)
                 {
                     object obj4 = property.GetValue(this.entity);
                     if (obj4 == null)
                     {
                         obj4 = Activator.CreateInstance(obj3.GetType());
                         property.SetValue(this.entity, obj4, this.propertyName, false);
                     }
                     else
                     {
                         property.ClearBackingICollectionInstance(obj4);
                     }
                     foreach (object obj5 in (IEnumerable) obj3)
                     {
                         property.AddValueToBackingICollectionInstance(obj4, obj5);
                     }
                     results.Add(obj4);
                 }
                 else
                 {
                     property.SetValue(this.entity, obj3, this.propertyName, false);
                     results.Add(obj3);
                 }
                 num++;
                 if (((obj3 != null) && (MergeOption.NoTracking != atom.MergeOptionValue)) && flag4)
                 {
                     if (flag2)
                     {
                         source.DeleteLink(this.entity, this.propertyName, obj3);
                     }
                     else
                     {
                         source.AttachLink(this.entity, this.propertyName, obj3, atom.MergeOptionValue);
                     }
                 }
             }
             continuation = atom.GetContinuation(null);
             Util.SetNextLinkForCollection(property.IsEntityCollection ? instance : this.entity, continuation);
         }
         if (instanceCreated)
         {
             property.SetValue(this.entity, instance, this.propertyName, false);
         }
         atom2 = MaterializeAtom.CreateWrapper(source, results, continuation);
     }
     finally
     {
         source.ApplyingChanges = applyingChanges;
     }
     return atom2;
 }