An error occurred when linq in LLBLGEN

Posts   
 
    
weezer
User
Posts: 42
Joined: 24-Apr-2012
# Posted on: 20-Mar-2013 04:39:55   

I received the following error: "No DataAccessAdapter instance set on LLBLGenProProvider2 instance. Can't execute query"

 protected void PopulateTeamLeaders()
    {
        var q = from c in MetaSingletons.MetaData.VwProjectCollection select c.TeamLeaderName;
        foreach (var leader in q)
        {
            RadTreeNode leaderNode = new RadTreeNode(leader.ToString());
            treProjects.Nodes.Add(leaderNode);

        }
    
        
        using (DataAccessAdapter adapter = clsDatabaseMethods.GetNewAdapter())
        {
        
            ((LLBLGenProProvider2)((IQueryable)q).Provider).AdapterToUse = adapter;

        }
    }
daelmo avatar
daelmo
Support Team
Posts: 8245
Joined: 28-Nov-2005
# Posted on: 20-Mar-2013 06:51:01   

My guess is this: at this part...

foreach (var leader in q)
{
        ...
}

... you are enumerating the query, so that makes the query (q) gets executed. So you are executing the query before setting a valid DataAccessAdapter instance to it. So your code should look like:

protected void PopulateTeamLeaders()
    {
        var q = from c in MetaSingletons.MetaData.VwProjectCollection select c.TeamLeaderName;
        using (DataAccessAdapter adapter = clsDatabaseMethods.GetNewAdapter())
        {       
            ((LLBLGenProProvider2)((IQueryable)q).Provider).AdapterToUse = adapter;
        }

        foreach (var leader in q)
        {
            RadTreeNode leaderNode = new RadTreeNode(leader.ToString());
            treProjects.Nodes.Add(leaderNode);
        }   
    }
David Elizondo | LLBLGen Support Team
weezer
User
Posts: 42
Joined: 24-Apr-2012
# Posted on: 20-Mar-2013 08:37:34   

I used the following, since your code will show an exception." DataAdapter is been disposed"

protected void PopulateTeamLeaders() { var q = from c in MetaSingletons.MetaData.VwProjectCollection select (c.TeamLeaderName);

    using (DataAccessAdapter adapter = clsDatabaseMethods.GetNewAdapter())
    {
        ((LLBLGenProProvider2)((IQueryable)q).Provider).AdapterToUse = adapter;

        foreach (var leader in q)
        {

            RadTreeNode leaderNode = new RadTreeNode(leader.ToString());
            treProjects.Nodes.Add(leaderNode);


        }
    }


}
Otis avatar
Otis
LLBLGen Pro Team
Posts: 39910
Joined: 17-Aug-2003
# Posted on: 20-Mar-2013 11:13:32   

weezer wrote:

I received the following error: "No DataAccessAdapter instance set on LLBLGenProProvider2 instance. Can't execute query"

 protected void PopulateTeamLeaders()
    {
        var q = from c in MetaSingletons.MetaData.VwProjectCollection select c.TeamLeaderName;
        foreach (var leader in q)
        {
            RadTreeNode leaderNode = new RadTreeNode(leader.ToString());
            treProjects.Nodes.Add(leaderNode);

        }
    
        
        using (DataAccessAdapter adapter = clsDatabaseMethods.GetNewAdapter())
        {
        
            ((LLBLGenProProvider2)((IQueryable)q).Provider).AdapterToUse = adapter;

        }
    }

Of course this gives this exception. You wrapped the adapter creation with a using statement. While you assign the adapter to the queryable, when the using block exists (the line below the assignment) it will call Dispose on the object in the using(..) statement, which in your case is the adapter object. So you have to execute the query INSIDE the using block.

Frans Bouma | Lead developer LLBLGen Pro