The identity tracking must not be stopped: within the same DataContext, the same request done twice will return twice the same object.The things to change are just the SubmitChange() and a few others.
On Fri, Apr 3, 2009 at 09:06, Giacomo Tesio <[email protected]> wrote: > I'll search... > Actually, what is not so obvious is to *really* stop the identity > tracking. > > This should produce faster DataContext during selects. > > > DeferredLoading is actually a big miss. We should address it. > We MUST document such a missing feature somewhere visible (since the Linq > to Sql enable it by default!), or we become like Microsoft which often > document only what works as expected (actually I did expect that it was > working... fortunally it sould not be a problem for our design...). > > About the exception, we could throw a NotImplementedException when the user > explicitly set true to DeferredLoadingEnabled, while not when he set it to > false. > We should also throw on each query when deferred loading is enabled (by > default it is, according to the documentation), but I'm not sure it's > acceptable... > > > Anyway, I think that a list of missing features is every day more urgent! > > > That said, what I should change to disable object tracking when * > ObjectTrackingEnabled* is false? > > > Giacomo > > > > > On Fri, Apr 3, 2009 at 12:02 AM, Pascal Craponne <[email protected]> wrote: > >> Pong*. >> >> Well, apparently the changes are obvious :pJust check the value and throw >> the exceptions when necessary. >> >> Regarding deffered loading, that's probably not as simple. We had threads >> on it a long time ago, and I suggest you to search in the group archives. >> >> * Answering "pong" to a "ping" is probably just a french joke. Sorry. >> >> On Thu, Apr 2, 2009 at 23:56, Giacomo Tesio <[email protected]> wrote: >> >>> Ping! :-D >>> >>> >>> Giacomo >>> >>> >>> On Wed, Apr 1, 2009 at 9:29 AM, Giacomo Tesio <[email protected]> wrote: >>> >>>> Ok >>>> Here's the relevant documentation and the exceptions thrown. >>>> Note that we should also consider the LoadOptions property (and the >>>> DataLoadOption >>>> class<http://msdn.microsoft.com/en-us/library/system.data.linq.dataloadoptions.aspx> >>>> ) >>>> >>>> What shoud be the working plan? >>>> >>>> >>>> *bool ObjectTrackingEnabled* >>>> Instructs the framework to track the original value and object identity >>>> for this DataContext. >>>> >>>> Setting this property to false improves performance at retrieval time, >>>> because there are fewer items to track. >>>> >>>> An exception is thrown: >>>> >>>> - If the property is set to false after a query has been executed. >>>> [1] >>>> For more information, see the Valid Modes section in >>>> DataContext<http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.aspx> >>>> >>>> >>>> - >>>> >>>> If the property is set to false and >>>> SubmitChanges<http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.submitchanges.aspx>is >>>> called. [2] >>>> >>>> *bool **DeferredLoadingEnabled * >>>> Specifies whether to delay-load one-to-many or one-to-one relationships. >>>> >>>> >>>> When false and the code accesses one of these relationships, null is >>>> returned if the relationship is one-to-one, and an empty collection is >>>> returned if it is one-to-many. The relationships can still be filled by >>>> setting the >>>> LoadOptions<http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.loadoptions.aspx>property. >>>> >>>> Deferred loading requires object tracking. Only the following three >>>> modes are valid: >>>> >>>> - >>>> >>>> >>>> ObjectTrackingEnabled<http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.objecttrackingenabled.aspx>= >>>> false. DeferredLoadingEnabled is ignored and inferred to be false. >>>> This behavior corresponds to a read-only >>>> DataContext<http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.aspx> >>>> . >>>> - >>>> >>>> >>>> ObjectTrackingEnabled<http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.objecttrackingenabled.aspx>= >>>> true. DeferredLoadingEnabled = false. This situation corresponds to >>>> a >>>> DataContext<http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.aspx>that >>>> allows users to load an object graph by using >>>> >>>> LoadWith<http://msdn.microsoft.com/en-us/library/system.data.linq.dataloadoptions.loadwith.aspx>directives, >>>> but it does not enable deferred loading. >>>> - >>>> >>>> Both are set to true. This is the default. >>>> >>>> The flags may not be changed after a query has been executed. Any change >>>> after the execution of the first query that uses that >>>> DataContext<http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.aspx>throws >>>> an exception. [3] >>>> >>>> >>>> >>>> *Exceptions thrown*: >>>> >>>> [1] >>>> System.InvalidOperationException was unhandled >>>> Message="Data context options cannot be modified after results have >>>> been returned from a query." >>>> Source="System.Data.Linq" >>>> StackTrace: >>>> at System.Data.Linq.DataContext.set_ObjectTrackingEnabled(Boolean >>>> value) >>>> at DbLinq.Mssql.Example.Program.Main(String[] args) in >>>> C:\Projects\Labs\Linq\DbLinq\examples\DbLinq.Tests\Program.cs:line 109 >>>> at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] >>>> args) >>>> at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence >>>> assemblySecurity, String[] args) >>>> at >>>> Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() >>>> at System.Threading.ThreadHelper.ThreadStart_Context(Object >>>> state) >>>> at System.Threading.ExecutionContext.Run(ExecutionContext >>>> executionContext, ContextCallback callback, Object state) >>>> at System.Threading.ThreadHelper.ThreadStart() >>>> InnerException: >>>> _____________ >>>> [2] >>>> System.InvalidOperationException was unhandled >>>> Message="Object tracking is not enabled for the current data context >>>> instance." >>>> Source="System.Data.Linq" >>>> StackTrace: >>>> at System.Data.Linq.DataContext.VerifyTrackingEnabled() >>>> at System.Data.Linq.DataContext.SubmitChanges(ConflictMode >>>> failureMode) >>>> at System.Data.Linq.DataContext.SubmitChanges() >>>> at DbLinq.Mssql.Example.Program.Main(String[] args) in >>>> C:\Projects\Labs\Linq\DbLinq\examples\DbLinq.Tests\Program.cs:line 109 >>>> at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] >>>> args) >>>> at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence >>>> assemblySecurity, String[] args) >>>> at >>>> Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() >>>> at System.Threading.ThreadHelper.ThreadStart_Context(Object >>>> state) >>>> at System.Threading.ExecutionContext.Run(ExecutionContext >>>> executionContext, ContextCallback callback, Object state) >>>> at System.Threading.ThreadHelper.ThreadStart() >>>> InnerException: >>>> _____________ >>>> [3] >>>> System.InvalidOperationException was unhandled >>>> Message="Data context options cannot be modified after results have >>>> been returned from a query." >>>> Source="System.Data.Linq" >>>> StackTrace: >>>> at >>>> System.Data.Linq.DataContext.set_DeferredLoadingEnabled(Boolean value) >>>> at DbLinq.Mssql.Example.Program.Main(String[] args) in >>>> C:\Projects\Labs\Linq\DbLinq\examples\DbLinq.Tests\Program.cs:line 109 >>>> at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] >>>> args) >>>> at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence >>>> assemblySecurity, String[] args) >>>> at >>>> Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() >>>> at System.Threading.ThreadHelper.ThreadStart_Context(Object >>>> state) >>>> at System.Threading.ExecutionContext.Run(ExecutionContext >>>> executionContext, ContextCallback callback, Object state) >>>> at System.Threading.ThreadHelper.ThreadStart() >>>> InnerException: >>>> _____________ >>>> >>>> >>>> On Tue, Mar 31, 2009 at 10:42 AM, Pascal Craponne <[email protected]>wrote: >>>> >>>>> Well, I suggest that you list all effects of such parameter (exceptions >>>>> thrown when specific methods are called), and then we'll see how to >>>>> implement them. >>>>> >>>>> Pascal. >>>>> >>>>> jabber/gtalk: [email protected] >>>>> msn: [email protected] >>>>> >>>>> >>>>> >>>>> >>>>> On Tue, Mar 31, 2009 at 10:37, Giacomo Tesio <[email protected]> wrote: >>>>> >>>>>> Hello everybody! >>>>>> I've figured now that we could need a readonly DataContext for >>>>>> security reasons. >>>>>> In >>>>>> http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.deferredloadingenabled.aspxit >>>>>> is said that that would be possible, by setting >>>>>> DataContext.ObjectTrackingEnabled = false. >>>>>> >>>>>> Actually those two proprerty required to get such a behaviour throws >>>>>> NotImplementedException. >>>>>> >>>>>> I could try to implement them, at least to get the readonly behaviour >>>>>> (which even if not trivial, should be possible in a reasonable time). >>>>>> >>>>>> Can someone get me an overview of the required modifications and point >>>>>> me to the place to start? >>>>>> >>>>>> >>>>>> Giacomo >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> >>>> >>> >>> >>> >> >> >> > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "DbLinq" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/dblinq?hl=en -~----------~----~----~----~------~----~------~--~---
