在NHibernate中删除多对多关联

时间:2008-12-16 15:03:40

标签: c# nhibernate

我使用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;
    }
}

类别具有Id Guid属性

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

非常感谢:o)

1 个答案:

答案 0 :(得分:3)

您是否尝试过使用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将针对服务器执行该操作,无需提问。