是否有方法使用Fluent NHibernate删除多个记录?
我现在使用此方法删除多条记录
Session.Delete(string.Format("from {0} o where o.RecordCreatedTime > {1}",
typeof(Order).Name + "s",
DateTime.NowUTC.Date.AddDays(-31)));
我在Fluent中寻找类似的东西
Session.Deleted<Order>(o => o.RecordCreatedTime > DateTime.NowUTC.Date.AddDays(-31));
答案 0 :(得分:0)
不,除了传递HQL之外,没有办法删除更多项目。在这里查看:
有3次重载采用HQL查询
public int Delete(string query)
{
using (new SessionIdLoggingContext(SessionId))
{
return Delete(query, NoArgs, NoTypes);
}
}
public int Delete(string query, object value, IType type)
{
using (new SessionIdLoggingContext(SessionId))
{
return Delete(query, new[] {value}, new[] {type});
}
}
以上这两个只是称之为:
public int Delete(string query, object[] values, IType[] types)
{
using (new SessionIdLoggingContext(SessionId))
{
if (string.IsNullOrEmpty(query))
{
throw new ArgumentNullException("query", "attempt to perform delete-by-query with null query");
}
CheckAndUpdateSessionStatus();
if (log.IsDebugEnabled)
{
log.Debug("delete: " + query);
if (values.Length != 0)
{
log.Debug("parameters: " + StringHelper.ToString(values));
}
}
IList list = Find(query, values, types);
int count = list.Count;
for (int i = 0; i < count; i++)
{
Delete(list[i]);
}
return count;
}
}
所有这些实际上导致Find()
并迭代它。
解决方案:我们可以创建一些自定义实现... ICriteria
或QueryOver
...并迭代