Yes, you got the idea. On Mon, Apr 20, 2009 at 10:41, Giacomo Tesio <[email protected]> wrote:
> I've studied a bit the problem. > > Given Customer and Order where exist Customer.Orders (EntitySet<Order>) and > Order.Customer (EntityRef<Customer>): > > Order.Customer, before being accessed should contain the customerID and a > lambda able to query the dataContext for providing the Customer. > Customer.Orders, before being accessed should contain the customerID and a > lambda able to query the datacontext for providing the Orders. > > Both need a (non serializable) reference to the DataContext. > > When the EntityRef.Entity is firstly accessed, the lambda is invoked on the > datacontext providing (and storing in a private field) the concrete entity. > > EntitySet should do the same where any of it's properties is accessed. > > Strangely no public constructor take an expression, but I could suppose > that there are private ones for this. > > When invoking add or remove entities from entity set should act properly > upon the datacontext. > > > > Am I missing something about this? > (It really could be, since I'm also working on a Domain Model with similar > but different problematics) > > > Giacomo > > > > 1. When Entity EntityRef should contain the value of the referencing key > (often the id of the referenced entity) and > > 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 -~----------~----~----~----~------~----~------~--~---
