代码之家  ›  专栏  ›  技术社区  ›  Sebastian Edelmeier

Fluent映射:使用联接表和级联

  •  0
  • Sebastian Edelmeier  · 技术社区  · 14 年前

    当前无法映射下表设置:

                   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");
        }
    }
    

    1 回复  |  直到 14 年前
        1
  •  1
  •   Jamie Ide    14 年前

    条目留在链接表中,因为category.articles被定义为关系的反面。为了删除链接记录,需要先从文章.类别中删除类别,然后再删除它。