流畅的NHibernate删除多个对象

时间:2014-07-30 08:39:01

标签: c# nhibernate fluent-nhibernate

是否有方法使用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));

1 个答案:

答案 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()并迭代它。

解决方案:我们可以创建一些自定义实现... ICriteriaQueryOver ...并迭代