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?
HQL is the way to go.
Session.CreateQuery("update Product set Active = :active where id in (:ids)")
.SetParameter("active", active)
.SetParameterList("ids", listOfSelectedProductIds)
.ExecuteUpdate();
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With