2008-12-16 121 views
3

我有一个使用NHibernate的多对多关系。在NHibernate中删除多对多关联

是否有更简单的方法从所有产品中删除类别关联而不为Join表创建类?

我想的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); 
     } 

A产品的代码一组类别

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)

回答

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将执行对服务器没有问题的问题。

相关问题