Question

I have collection of users identified by property Id and for each user I want to update his username to something like username+"!".

In bltoolkit I try it like this:

using(var db = new DbManager)
{
    foreach(var user in users)
    {
        db.GetTable<User>().Where(x=>x.Id == user.Id).Set(x=>x.Username, x.Username + "!").Update();
    }        
}

I suppose that this would make n queries to the database (while n is the size of the users collection), which is what I am trying to avoid.

Is there any other (better) solution to update whole collection like this?

Was it helpful?

Solution

Add this using to your code:

using BLToolkit.Data.Linq

Now you can use Update<T> extension method in your DbManager. This method allows you to do batch update by passing collection of entities as a parameter.

In your case use it like this:

using(var db = new DbManager)
{
    foreach(var user in users)
       user.Username = user.Username + "!";  //update each user in collection first

    db.Update<User>(users);  //just one database call for batch update
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top