gpt4 book ai didi

c# - 删除 NHibernate 中的多对多关联

转载 作者:行者123 更新时间:2023-11-30 16:36:50 24 4
gpt4 key购买 nike

我使用 NHibernate 建立多对多关系。

是否有更简单的方法可以在不为连接表创建类的情况下从所有产品中删除类别关联?

我希望 SQL 看起来像

DELETE FROM ProductCategories WHERE CategoryId = 123

这是我们用来删除关联的代码

        DetachedCriteria fetchCriteria = DetachedCriteria.For<Product>()
.CreateAlias("Categories", "categories")
.Add(Restrictions.Eq("categories.Id", category.Id));

ICollection<Product> products = productRepo.FindAll(fetchCriteria);

foreach(var product in products)
{
product.Categories.Remove(category);
productRepo.Save(product);
}

一个产品有一组类别

public class Product{
public ISet<Category> Categories
{
get;set;
}
}

Category 有一个 Id Guid 属性

public class Category {
public Guid Id {get;set;}
public string Name {get;set;}
}

非常感谢:o)

最佳答案

您是否尝试过使用 ISession.Delete(query) 方法?它采用 HQL 查询,加载对象然后删除它们。

session.Delete("from Product p join p.Categories c where c.id = :category", category, NHibernateUtil.Entity(typeof(Category)));

我的 HQL 有点生疏,如果查询不太正确,请原谅。

如果您不喜欢预加载所有对象的想法,另一种选择是使用 session.CreateSQLQuery 并直接传入一条 SQL 语句来执行删除操作。 NHibernate 将不问任何问题地针对服务器执行该操作。

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

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