gpt4 book ai didi

nhibernate - 如何使用标准删除 NHibernate 对象?

转载 作者:行者123 更新时间:2023-12-03 23:58:18 25 4
gpt4 key购买 nike

这应该是一个简单的问题。给定一个条件,如何删除满足条件的实体?

理由:

HQL 和 NH 标准是 NHibernate 特定的构造,因此它们是服务器端 DAL 实现细节。我不希望它们“泄漏”到客户端。因此,我们的客户端提供了 LINQ 表达式供服务器处理。到目前为止,选择请求和 LINQ to NHibernate 处理它们的请求都很好。

但是,现在需要实现批量删除操作。像往常一样,客户端提供一个 LINQ 表达式,服务器将删除满足该表达式的实体。
不幸的是,LINQ to NHibernate 在这里没有帮助。它最多可以将给定的 LINQ 表达式转换为 NHibernate 标准。

无论如何,这就是故事。我想强调的是,客户端根本不知道 NHibernate,我喜欢它保持这种状态。

附言

我正在使用 NH 2.1

最佳答案

您可以使用标准来选择元素的 ID,将它们连接到一个字符串中并使用 HQL 删除它们?

类似的东西:

public void Delete(ICriteria criteria, string keyName, string tableName)
{
criteria.setProjection(Projections.Attribute(keyName));
IList<int> itemIds = criteria.List<int>();

string collection = string.Join(",", Array.ConvertAll<int, string>(itemIds, Convert.ToString));

Session.HQL(string.Format("delete from {0} where {1} in ({2})", tableName, keyName, collection);
}

这段代码没有经过测试或编译(特别是我不确定 HQL 部分),但我认为您明白了:由于投影,我们不获取整个对象,而只获取索引。

关于nhibernate - 如何使用标准删除 NHibernate 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1326950/

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