如何在nhibernate中进行批量更新?

cho*_*bo2 8 nhibernate

我想知道如何进行大规模更新?我想做一个where子句并获取满足where子句的所有项目,Where(x => x.Id == 1).ToList()然后对所有这些项目进行更新.

// change every name to bob
A.Name = "bob"
// then do a mass update
Run Code Online (Sandbox Code Playgroud)

我必须做一个foreach循环吗?并通过每个,然后发送它更新或有另一种方法来做到这一点?

谢谢

编辑

我有这个

// in my repo;
  private readonly ISession session;

 // session done with ninject IOC
public MyRepo(ISession session)
{
   this.session = session;
}

public void MassUpdate(int id, string prefix)
{
         var query = "UPDATE TableA SET Name= (:prefix) WHERE Id IN (:Id)";
          session.CreateQuery(query).SetParameter("prefix", prefix).SetParameter("Id",Id);
}

 public void Insert(MyClass myClass)
 {
    sesson.save(myClass);
 }

public void Commit()
{
    using (ITransaction transaction = session.BeginTransaction())
     {
                    transaction.Commit();
     }
}

 // service layer method

 public void myMethod()
 {
     MyClass myClass = nw MyClass() { Name = "test"};
     MyRepo r = new Repo();
     r.MassUpdate(1,"bob");
     r.Insert(myClass);
     r.Commit();
 }
Run Code Online (Sandbox Code Playgroud)

那么如何设置我的MassUpdate以在Commit()上执行.请注意,此提交用于MyRepo中的所有方法,因此我不能将commit粘贴在commit方法中.

reb*_*ard 10

扩展Diego的答案,您可以使用HQL发送参数列表:

var person = 25;
var query = "update Foo set Name = 'bob' where id = :person";
var update = session.CreateQuery(query)
                    .SetParameter("person", person);


/***
 *
 * Do Stuff
 *
 ***/

 update.ExecuteUpdate();
Run Code Online (Sandbox Code Playgroud)