Hello,
I started to look at your library because it looks exactly what I will need to enable change tracking in my app. My app uses .NET Framework 4.7.2 and is a WPF+SQL Server+EntityFramework app
Now, first I got an error about not all my DataObject properties being virtual.
OK, I made them virtual.
The problem is my ListProperties are ObservableCollection, and not IList
Now I got an error saying property Count is not virtual?
In ObservableCollection => property Count DOES NOT HAVE A SETTER, only a getter.
Not to mention that I cannot edit it to be virtual even if I wanted to, as it belongs to Microsoft.
The error comes when I do trackable.AcceptChanges() and it has a property of type ObservableCollection
Now, my questions would be:
- Can I ignore ALL properties defined in the BaseClass of my DataObject and use ONLY properties defined in the DataObject class.
- Can I NOT get an exception for a Non-Virtual property? I don't care that it will not participate in the change tracking, I just want to be able to use the library
Related to 1) Is there any way by default to Exclude everything from hierarchy and let me to manually mark things that I want to? Similar to Json.OptIn functionality.
Thank you very much for your help.
FullStackTrace of the error ( cutting out my Main static method from my test console app )
My Object is called wc_package
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, Object[] index)
at ChangeTracking.ComplexPropertyInterceptor1.MakeAllPropertiesTrackable(Object proxy) in C:\projects\changetracking\Source\ChangeTracking\ComplexPropertyInterceptor.cs:line 176 at ChangeTracking.ComplexPropertyInterceptor1.ComplexPropertyTrackables(Object proxy) in C:\projects\changetracking\Source\ChangeTracking\ComplexPropertyInterceptor.cs:line 165
at ChangeTracking.ComplexPropertyInterceptor1.Intercept(IInvocation invocation) in C:\projects\changetracking\Source\ChangeTracking\ComplexPropertyInterceptor.cs:line 144 at Castle.DynamicProxy.AbstractInvocation.Proceed() at ChangeTracking.EditableObjectInterceptor1.Intercept(IInvocation invocation) in C:\projects\changetracking\Source\ChangeTracking\EditableObjectInterceptor.cs:line 87
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at ChangeTracking.ChangeTrackingInterceptor1.Intercept(IInvocation invocation) in C:\projects\changetracking\Source\ChangeTracking\ChangeTrackingInterceptor.cs:line 96 at Castle.DynamicProxy.AbstractInvocation.Proceed() at ChangeTracking.NotifyPropertyChangedInterceptor1.Intercept(IInvocation invocation) in C:\projects\changetracking\Source\ChangeTracking\NotifyPropertyChangedInterceptor.cs:line 68
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Castle.Proxies.wc_packageProxy.get_ComplexPropertyTrackables()
at ChangeTracking.Internal.Utils.GetChildren[TResult](Object proxy, List1 parents) in C:\projects\changetracking\Source\ChangeTracking\Internal\Utils.cs:line 12 at ChangeTracking.ChangeTrackingInterceptor1.AcceptChanges(Object proxy, List1 parents) in C:\projects\changetracking\Source\ChangeTracking\ChangeTrackingInterceptor.cs:line 300 at ChangeTracking.ChangeTrackingInterceptor1.Intercept(IInvocation invocation) in C:\projects\changetracking\Source\ChangeTracking\ChangeTrackingInterceptor.cs:line 148
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at ChangeTracking.NotifyPropertyChangedInterceptor`1.Intercept(IInvocation invocation) in C:\projects\changetracking\Source\ChangeTracking\NotifyPropertyChangedInterceptor.cs:line 83
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Castle.Proxies.wc_packageProxy.AcceptChanges()
Hello,
I started to look at your library because it looks exactly what I will need to enable change tracking in my app. My app uses .NET Framework 4.7.2 and is a WPF+SQL Server+EntityFramework app
Now, first I got an error about not all my DataObject properties being virtual.
OK, I made them virtual.
The problem is my ListProperties are ObservableCollection, and not IList
Now I got an error saying property Count is not virtual?
In ObservableCollection => property Count DOES NOT HAVE A SETTER, only a getter.
Not to mention that I cannot edit it to be virtual even if I wanted to, as it belongs to Microsoft.
The error comes when I do trackable.AcceptChanges() and it has a property of type ObservableCollection
Now, my questions would be:
Related to 1) Is there any way by default to Exclude everything from hierarchy and let me to manually mark things that I want to? Similar to Json.OptIn functionality.
Thank you very much for your help.
FullStackTrace of the error ( cutting out my Main static method from my test console app )
My Object is called wc_package
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, Object[] index)
at ChangeTracking.ComplexPropertyInterceptor
1.MakeAllPropertiesTrackable(Object proxy) in C:\projects\changetracking\Source\ChangeTracking\ComplexPropertyInterceptor.cs:line 176 at ChangeTracking.ComplexPropertyInterceptor1.ComplexPropertyTrackables(Object proxy) in C:\projects\changetracking\Source\ChangeTracking\ComplexPropertyInterceptor.cs:line 165at ChangeTracking.ComplexPropertyInterceptor
1.Intercept(IInvocation invocation) in C:\projects\changetracking\Source\ChangeTracking\ComplexPropertyInterceptor.cs:line 144 at Castle.DynamicProxy.AbstractInvocation.Proceed() at ChangeTracking.EditableObjectInterceptor1.Intercept(IInvocation invocation) in C:\projects\changetracking\Source\ChangeTracking\EditableObjectInterceptor.cs:line 87at Castle.DynamicProxy.AbstractInvocation.Proceed()
at ChangeTracking.ChangeTrackingInterceptor
1.Intercept(IInvocation invocation) in C:\projects\changetracking\Source\ChangeTracking\ChangeTrackingInterceptor.cs:line 96 at Castle.DynamicProxy.AbstractInvocation.Proceed() at ChangeTracking.NotifyPropertyChangedInterceptor1.Intercept(IInvocation invocation) in C:\projects\changetracking\Source\ChangeTracking\NotifyPropertyChangedInterceptor.cs:line 68at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Castle.Proxies.wc_packageProxy.get_ComplexPropertyTrackables()
at ChangeTracking.Internal.Utils.GetChildren[TResult](Object proxy, List
1 parents) in C:\projects\changetracking\Source\ChangeTracking\Internal\Utils.cs:line 12 at ChangeTracking.ChangeTrackingInterceptor1.AcceptChanges(Object proxy, List1 parents) in C:\projects\changetracking\Source\ChangeTracking\ChangeTrackingInterceptor.cs:line 300 at ChangeTracking.ChangeTrackingInterceptor1.Intercept(IInvocation invocation) in C:\projects\changetracking\Source\ChangeTracking\ChangeTrackingInterceptor.cs:line 148at Castle.DynamicProxy.AbstractInvocation.Proceed()
at ChangeTracking.NotifyPropertyChangedInterceptor`1.Intercept(IInvocation invocation) in C:\projects\changetracking\Source\ChangeTracking\NotifyPropertyChangedInterceptor.cs:line 83
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Castle.Proxies.wc_packageProxy.AcceptChanges()