2010-11-15 50 views
0

具有對當前下表設置映射了一點小麻煩:流利的映射:使用連接表和級聯

   Shop 
      [1] [1]     
      /  \ 
      [n]  [n] 
    Category-[m]---[n]-Article 

行爲應該是以下幾點:
1 - 刪除店的時候,所有的文章和類別應被刪除
2 - 刪除一個目錄時,相關文章應該是未分配但未被刪除
3 - 刪除文章的時候,相關的分類應該是未分配但未被刪除

下面是當前映射:

public class ShopMap: ClassMap<Shop> 
{ 
    public ShopMap() 
    { 
     this.Table("shop"); 
     Id(x => x.Id).Column("id").GeneratedBy.Native(); 
     Map(x => x.Name).Column("name"); 

     HasMany(x => x.Categories).Cascade.AllDeleteOrphan; 
     HasMany(x => x.Articles).Cascade.AllDeleteOrphan; 
    } 
} 

public class CategoryMap: ClassMap<Category> 
{ 
    public CategoryMap() 
    { 
     this.Table("category"); 
     Id(x => x.Id).Column("id").GeneratedBy.Native(); 
     Map(x => x.Name).Column("name"); 

     References(x => x.Shop); 

     HasManyToMany(x => x.Articles).Cascade.AllDeleteOrphan() 
            .Table("article_category") 
            .ChildKeyColumn("article_id") 
            .ParentKeyColumn("category_id") 
             .Inverse(); 
    } 
} 

public class ArticleMap: ClassMap<Article> 
{ 
    public ArticleMap() 
    { 
     this.Table("article"); 
     Id(x => x.Id).Column("id").GeneratedBy.Native(); 
     Map(x => x.Name).Column("name"); 

     References(x => x.Shop); 

     HasManyToMany(x => x.Categories).Cascade.All() 
            .Table("article_category") 
            .ParentKeyColumn("article_id") 
            .ChildKeyColumn("category_id"); 
    } 
} 

當刪除一個目錄(使用Session.delete()),NH嘗試刪除相關文章,以及。將級聯模式更改爲保存更新將解決此問題,但會將條目留在鏈接表* article_category *中。總結:Cascade.SaveUpdate太懶,Cascade.All太急切了。

我嘗試了所有在映射中想到的東西,但是找不到映射這個(相當簡單的模式)的正確方法。

有關如何(流利地)映射此任何想法非常感謝!預先

塞比

回答

1

由於條目被留在鏈路表,因爲Category.Articles被定義爲關係的逆側。您需要從Article.Categories中刪除類別,然後再刪除它以便刪除鏈接記錄。