The key methods are DataContext.SetEntityRefQueries() and
DataContext.SetEntitySetsQueries()

They are called from DataContext._GetOrRegisterEntity(), called from
DataContext.Register() which is called from QueryRunner.GetUniqueRow() and
QueryRunner.Select().


I suppose that QueryRunner run queries: so it could be the starting point to
work/study for implementing lazy loading.



Giacomo


On Tue, Apr 14, 2009 at 3:43 PM, Giacomo Tesio <[email protected]> wrote:

> RTFM? What a BOFH! :-D
>
>
> On Tue, Apr 14, 2009 at 3:41 PM, Pascal Craponne <[email protected]> wrote:
>
>> http://msdn.microsoft.com/en-us/library/bb341748.aspx
>> http://msdn.microsoft.com/en-us/library/bb348960.aspx
>>
>> DbLinq API is similar to Linq2SQL API, so MSDN will provide you a lot of
>> anwers.
>> Never forget to RTFM :)
>>
>> Regarding the place where they are filled, you'll need to search by
>> yourself, since we appear to have the same level of knowledge for this
>> question (==none).
>>
>> On Tue, Apr 14, 2009 at 15:36, Giacomo Tesio <[email protected]> wrote:
>>
>>> Very good explaination.
>>>
>>> Some other question about this:
>>> - What's the difference between EntitySet and EntityRef?
>>> - Where are they filled/loaded? aka: where are the queries executed (i've
>>> found no call to Load in the core code, just in tests)
>>>
>>> About the mutual references, I think that EntityTraker shoul be enought.
>>>
>>> After all, EntityTracking is a requirement even for Linq2Sql's lazy
>>> loading...
>>>
>>>
>>> Giacomo
>>>
>>>
>>> On Tue, Apr 14, 2009 at 11:53 AM, Pascal Craponne <[email protected]>wrote:
>>>
>>>> Well, let's try :)
>>>> 1. First of all, lazy loading means that after the first load, all
>>>> entity's EntitySets and EntityRefs are empty.
>>>> 2. The first time they're used, we want them to actually load the
>>>> referenced entities and keep them for further reference.
>>>> 3. Next, when using EntitySets and EntityRefs, we get a fast access to
>>>> the referenced entities, because they're already loaded.
>>>>
>>>> Until here, I think we all agree.
>>>>
>>>> So now, let's see each point in details.
>>>> We start from point 2, where the effective loading is done.
>>>> The EntitySet or EntityRef needs:
>>>> a. A foreign key referencing the entities to be loaded.
>>>> b. A reference to the table
>>>> c. A reference to the DataContext, or something like this.
>>>> Once invoked when unitialized, the EntitySet/Ref just performs a request
>>>> on the foreign keys to load the entities.
>>>>
>>>> Now let's move to point 1.
>>>> When an entity is loaded for the first time, its EntitySets and Refs are
>>>> initialized with the foreign keys and all necessary information to perform
>>>> lazy loading.
>>>>
>>>> Point 3 is no problem at all.
>>>>
>>>> So our EntitySet/Ref can be initialized in two ways:
>>>> - providing the entities (to allow eager loading, or current system).
>>>> - providing the foreign keys and all required information.
>>>>
>>>> But, of course, this would be too simple, since there are a few problems
>>>> to handle:
>>>> - mutual reference: an entity referenced with an EntitySet also has an
>>>> EntityRef to its referencing entity (am I clear?). We need to be sure that
>>>> all links are correct. This should probably work without any change thanks
>>>> to the cache.
>>>> - correct use of cache (Giacomo, I know you are fully concerned with
>>>> this :). This should work correctly if we reuse the DataContext.
>>>> - DataContext lifetime. When using lazy loading, we imply that the
>>>> DataContext is keep somewhere, so we may change its lifetime when used in a
>>>> service architecture. Worse, we could get problems when the DataContext
>>>> connection is closed. This is usually why lazy loading isn't allowed from
>>>> outside a service call, because the connection and transactions are closed,
>>>> and lazy loading can not be performed anymore.
>>>>
>>>> There may be some other problems, but I dumped here all the ideas I had
>>>> at the moment :)
>>>>
>>>> Pascal.
>>>>
>>>> On Tue, Apr 14, 2009 at 11:11, Giacomo Tesio <[email protected]> wrote:
>>>>
>>>>> Mmm... Do you know where I could work for implementing a correctly
>>>>> working lazy loading?
>>>>>
>>>>> Yet I've no complexive view of the source code, so any input is
>>>>> welcome.
>>>>>
>>>>> I saw Pablo worked on EntityRef and EntitySet but I've not yet idea of
>>>>> the difference.
>>>>> Could you explain me?
>>>>>
>>>>>
>>>>> Giacomo
>>>>>
>>>>>
>>>>> On Tue, Apr 14, 2009 at 10:59 AM, Pascal Craponne <[email protected]>wrote:
>>>>>
>>>>>> As far as I remember, it's neither eager or lazy.The linked entities
>>>>>> are loaded after the requested one are processed, and this, recursively.
>>>>>>
>>>>>> This is not eager because there are multiple requests to get all the
>>>>>> work done.
>>>>>> This is not lazy because when items are loaded all subsequent entities
>>>>>> are also loaded.
>>>>>>
>>>>>> Pablo implemented this, but he's not very active on the list by these
>>>>>> days :S
>>>>>>
>>>>>> On Mon, Apr 13, 2009 at 23:21, Giacomo Tesio <[email protected]>wrote:
>>>>>>
>>>>>>> Reading
>>>>>>>
>>>>>>> http://groups.google.com/group/dblinq/browse_thread/thread/283191499b74199f
>>>>>>> and
>>>>>>>
>>>>>>> http://groups.google.it/group/dblinq/browse_thread/thread/4a67b172b607b0f9/666ae4667594c828?hl=it&lnk=gst&q=lazy+load#
>>>>>>>
>>>>>>> I could not understand if DbLinq currently support lazy loading or
>>>>>>> not...
>>>>>>>
>>>>>>> Can you help me?
>>>>>>>
>>>>>>>
>>>>>>> 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
-~----------~----~----~----~------~----~------~--~---

Reply via email to