First I have solved this by myself, but I really don’t know if you understand what I mean.

 

> You have to start the lazy loading by accessing an IList property as "Count"

Yes I understand that. (That is what I tried to illustrate with the method “Do_some_logic_wich_lazy_loades_some_of_the_lists” below)

 

But the question is if I don’t want the lazy load to occur when I access a property of the list.

 

Another example:

 

Let’s say I have a class A with two lazy loaded lists L1 and L2.

I fetch an A object from the database and then loades the L1 list by accessing some property in L1.

After that I decide that I want to print the content of A.

 

Like this:

 

foreach(object o in a.L1)

            print(o.ToSting());

foreach(object o in a.L2)

            print(o.ToSting());

 

Since L2 is lazy loaded it will load from the database and will be printed.

That could be what I wanted to do.

 

BUT in some cases I would like to not lazy load the L2 list, just let it be empty and not be printed.

 

 

As I said I have solved this by modifying the SVN version.

Just added some checks to see if the sqlMap had a session started if not I just create an empty arraylist.

So I signal that the lazy load should not occur if the session is not started.

 

Regards Okku Touronen

 


From: Gilles Bayon [mailto:[EMAIL PROTECTED]
Sent: den 25 april 2006 19:00
To: [email protected]
Subject: Re: Lazy loading and generics

 

 

On 4/21/06, Okku Touronen <[EMAIL PROTECTED]> wrote:

How do you tell Ibatis that you don't want to lazy load anything more.

 

You have to start the lazy loading by accessing an IList property as "Count"

 

 

For instance if you want send the objects through soap.

 

Example:

SqlMapper sqlMap = Mapper.Get();

 

List<ClassWithLazyLoadedList> list = GetListFromDB(sqlMap)

 

Do_some_logic_wich_lazy_loades_some_of_the_lists(sqlMap,list);

 

Signal_IBatis_to_not_lazy_load_anyting_more(sqlMap);

 

string serializedObjects = Serialize(list);

 

 

/Okku

 


From: Gilles Bayon [mailto: [EMAIL PROTECTED]]
Sent: den 20 april 2006 22:48
To: [email protected]
Subject: Re: Lazy loading and generics

 

The code in SVN doesn't support lazy loading for generic list as it is not finish.


I don't understand the 2nd question.

 

-Gilles
 

On 4/20/06, Okku Touronen < [EMAIL PROTECTED]> wrote:

Hello I searched the issue tracker and found

IBATISNET-105: Lazy load support for Strong typed collections and single Items

 

I have a similar problem (I think) that lazy loading of a generic list doesn't work.

 

It seems to me that the proxy that is generated is not correct. So I get a casting exception.

The following code works, so the EmitPropertyAccessor.Set method should work only if the proxy was correct.

 

            ProxyGenerator gen = new ProxyGenerator();

object proxy = gen.CreateClassProxy(typeof(List<T>), new Interceptor());

            IList<T> ilist = (IList<T>)proxy;

 

I can't see any code in the LazyLoadList.NewInstance that is creating a proxy of such kind.

 

Another question: How do I signal that the "connection" is over do not lazy load anything more, for example if I want to serialize an object.

 

Regards Okku Touronen

 

 

 

Exception:

 

Unable to cast object of type 'ProxyInterfaceCollectionsArrayList_IList_ISerializable' to type 'System.Collections.Generic.List`1[lejistest.ACL ]'.   at MemberAccessorForlejistest.GroupaccessControlList.Set(Object , Object )

   at IBatisNet.Common.Utilities.Objects.Members.EmitPropertyAccessor.Set(Object target, Object value) in C:\dev\misc\Ibatis\IBatisNet.Common\Utilities\Objects\Members\EmitPropertyAccessor.cs:line 130

   at IBatisNet.DataMapper.MappedStatements.MappedStatement.SetObjectProperty(RequestScope request, ResultMap resultMap, ResultProperty mapping, Object& target, IDataReader reader) in C:\dev\misc\Ibatis\IBatisNet.DataMapper\MappedStatements\MappedStatement.cs:line 1360

   at IBatisNet.DataMapper.MappedStatements.MappedStatement.ApplyResultMap(RequestScope request, IDataReader reader, Object resultObject) in C:\dev\misc\Ibatis\IBatisNet.DataMapper\MappedStatements\MappedStatement.cs:line 264

   at IBatisNet.DataMapper.MappedStatements.MappedStatement.ExecuteQueryForList[T](IDalSession session, Object parameterObject, IList`1 resultObject, Boolean forceLazyLoad) in C:\dev\misc\Ibatis\IBatisNet.DataMapper\MappedStatements\MappedStatement.cs:line 945

   at IBatisNet.DataMapper.SqlMapper.QueryForList[T](String statementName, Object parameterObject, IList`1 resultObject, Boolean forceLazyLoad) in C:\dev\misc\Ibatis\IBatisNet.DataMapper\SqlMapper.cs:line 1150

   at DataAccess.GroupDataAccess.GetAllGroups(SqlMapper sql, Boolean forceLazyLoad) in C:\dev\LejisTest\Test1\Test1\DataAccess\groupDataAccess.cs:line 34

   at Test1.Form1.LoadGroups() in C:\dev\LejisTest\Test1\Test1\Form1.cs:line 81

 

 

Reply via email to