【问题标题】:Removing many to many associations in NHibernate在 NHibernate 中删除多对多关联
【发布时间】:2008-12-16 15:03:40
【问题描述】:

我使用 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)

【问题讨论】:

    标签: c# nhibernate


    【解决方案1】:

    您是否尝试过使用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 将在不问任何问题的情况下对服务器执行该操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多