Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nhibernate - Update single field without loading entity?

Tags:

c#

nhibernate

I have a use case where a user gets a list of products, and can select multiple products and active or deactivate them.

The model for this list is immutable, and I have a repository which takes a list of the model that should deactivate them all.

I do have another full product editing model, but I'd rather not have to load up hundreds of those to simply change one column.

I'm concidering using Session.CreateQuery, but is there a better way to acomplish this?

like image 396
Andy Avatar asked Aug 02 '10 18:08

Andy


2 Answers

HQL is the way to go.

Session.CreateQuery("update Product set Active = :active where id in (:ids)")
       .SetParameter("active", active)
       .SetParameterList("ids", listOfSelectedProductIds)
       .ExecuteUpdate();
like image 142
Diego Mijelshon Avatar answered Sep 23 '22 18:09

Diego Mijelshon


Since NHibernate 5, you can use LINQ for updates/deletes, like this:

session.Query<Product>()
    .Where(p => listOfSelectedProductIds.Contains(p.Id))
    .Update(p => new { Active = active });

It will not load entities or increment versions.

https://nhibernate.info/doc/nhibernate-reference/querylinq.html#querylinq-modifying

like image 35
Alex Avatar answered Sep 20 '22 18:09

Alex