gpt4 book ai didi

c# - Fluent NHibernate 删除多个对象

转载 作者:太空宇宙 更新时间:2023-11-03 15:52:55 24 4
gpt4 key购买 nike

有没有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));

最佳答案

不,除了通过 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...并进行迭代

关于c# - Fluent NHibernate 删除多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25032255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com