我想知道如何进行大规模更新?我想做一个where子句并获取符合where Where(x => x.Id == 1).ToList()
where where的所有项目,然后对所有这些项目进行更新。
// change every name to bob
A.Name = "bob"
// then do a mass update
我必须做一个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();
}
那么如何设置我的MassUpdate以在Commit()上执行。请注意,此提交用于MyRepo中的所有方法,因此我无法将commit粘贴在commit方法中。
答案 0 :(得分: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();
答案 1 :(得分:4)
session.CreateQuery("update Foo set Name = 'bob' where id = 1")
.ExecuteUpdate()
答案 2 :(得分:0)
对不起,这是一个迟到的答案,但只是为了让您知道更好的解决方案(没有明文查询):Linq to Nhibernate Bulk Update Query Equivalent?
在你的情况下,它会像这样应用:
session.Query<TableA>().Where(f => f.Id == id)
.Update(i => new Foo { prefix = myPrefix });