public void UpdateProperty(EntityNavigationPropertyInfo property, TModel newModel, IRecursiveEntityUpdater entityUpdater) { GenericMethodInvoker.InvokeGenericMethod(typeof(IRecursiveEntityUpdater), nameof(IRecursiveEntityUpdater.UpdateEntity), new Type[] { property.PropertyInfo.PropertyType }, GenericMethodInvoker.DefaultPublicInstanceBindingFlags, new object[] { property.PropertyInfo.GetValue(newModel), entityUpdater }, entityUpdater); }
// TODO: might add a method with lambda expression that selects model property public void UpdateCollectionProperty(IDbContextReflector reflector, EntityNavigationPropertyInfo property, TModel newModel, bool isNew, IEntityUpdater entityUpdater) { var genericArguments = property.PropertyInfo.PropertyType.GetGenericArguments(); var genericType = typeof(ICollectionPropertyUpdater <>).MakeGenericType(typeof(TModel)); GenericMethodInvoker.InvokeGenericMethod(genericType, nameof(ICollectionPropertyUpdater <TModel> .UpdateCollection), genericArguments, GenericMethodInvoker.DefaultPublicInstanceBindingFlags, new object[] { reflector, property, newModel, isNew, entityUpdater }, this.CollectionPropertyUpdater); }