弄这个搞了好久搞不出来,请帮忙看看:
  <class name="Bom">
    <id name="Id">
      <generator class="native"/>
    </id>
    <bag name="ItemMasterList" 
         table="ItemMaster_Bom">
      <key column="BomId"/>
      <many-to-many class="ItemMaster" column="ItemMasterId"/>
    </bag>
  </class>  <class name="ItemMaster">
    <id name="Id">
      <generator class="native" />
    </id>
    <bag name="BomList" 
         table="ItemMaster_Bom" 
         inverse="true">
      <key column="ItemMasterId"/>
      <many-to-many class="Bom" column="BomId"/>
    </bag>
  </class>public void SaveOneLevelsBomTest()
{
    CanGenSchema gen = new CanGenSchema();
    gen.CanGenSchemaTest(); //重新建数据表    ItemMaster item = CreateItemMasterWithoutItemGroup(); // 测试物料实例
    Bom bom = CreateEmptyBom(); // 测试 BOM 实例,还没关联物料    bom.AddItem(item);    ItemMasterHelper.Save(item);
    BomHelper.Save(bom);
}
运行后,BOM 和 ItemMaster 都能保存,但中间的关联表 ItemMaster_Bom 空白没有插入任何值。请问什么原因呢?

解决方案 »

  1.   

    很详细的例子,可以看看
    http://www.cnblogs.com/jillzhang/archive/2007/03/23/685750.html
      

  2.   


    很久以前刚学,那个例子我看过,因为那篇的命名混乱我最开始也不明白(他把中间表的User Id 命名为 Id,与 User 本身的主键 Id 相同,当时初学不知道嘛,多多得罪),后来再另外一些博文看完才懂一点,才能正确生成数据表。但测试保存还是不行。我标识 ItemMaster 内的 BOM 相关 bag 为 inverse=true,关联关系是由 BOM 负责。Bom 结构内有 AddItem() 方法负责把相方的 IList 都加上。除了 lazy 以外其他部分跟你给的链接几乎相同。public virtual void AddItem(ItemMaster item)
    {
        item.BomList.Add(this);
        ItemMasterList.Add(item);
    }我试过把 cascade=save-update 加回去,依然没效果。求教。
      

  3.   

    我觉得你应该确认一下中间表与其他两张表你是否建立了主外键关系。你将<key column="BomId"/>中写上foreign-key试试。