2010-10-13 17 views
0

使用fluentnhibernate我有一個鏈接表插入問題。FluentNhibernate HasManytoMany關係 - 它不添加到鏈接表

這裏是我的實體

public partial class Item 
{ 
    public virtual int Id 
    { 
     get; 
     set; 
    } 

    public virtual string Description 
    { 
     get; 
     set; 
    } 
    public virtual IList<Category> Categories 
    { 
     get; 
     set; 
    } 
} 
public partial class Category 
{ 
    public virtual int Id 
    { 
     get; 
     set; 
    } 

    public virtual string Name 
    { 
     get; 
     set; 
    } 
    public virtual string Description 
    { 
     get; 
     set; 
    } 
    public virtual IList<Item> Items 
    { 
     get; 
     set; 
    } 
} 

這裏是我的映射。

public class ItemMapping : ClassMap<Item> 
{ 
    public ItemMapping() 
    { 
     Table("Item"); 
     Schema("dbo"); 
     Id(x => x.Id); 
     Map(x => x.Description); 
     HasManyToMany(x => x.Categories) 
      .ChildKeyColumn("Item_id") 
      .ParentKeyColumn("Category_id") 
      .Table("CategoriesToItems") 
      .AsSet(); 
     } 
} 

    public class CategoryMapping : ClassMap<Category> 
{ 
    public CategoryMapping() 
    { 
     Table("Category"); 
     Schema("dbo"); 
     Id(x => x.Id); 
     Map(x => x.Description); 
     Map(x => x.Name); 
     HasManyToMany(x => x.Items) 
      .ChildKeyColumn("Category_id") 
      .ParentKeyColumn("Item_id") 
      .Table("CategoriesToItems") 
      .AsSet(); 
    } 
} 

這是我如何把它添加到收藏在我的MVC頁

var category = CategoryTask.Query(x => x.Id == post.Category).FirstOrDefault(); 

var item = new Item 
       { 
        Categories = new List<Category> { category }, 
        Tags = tags 
       }; 
ItemTasks.Save(item); 

我的問題是,爲什麼它沒有在我的鏈接表「CategoriesToItems」添加關係。該表已存在於帶有Category_Id(FK,int,not null)和Item_Id(FK,int,not null)的數據庫中。

問題在哪裏?爲什麼它不會將它添加到關係表?

+0

對此沒有任何建議? – Murat 2010-10-14 07:28:16

+0

你解決了這個問題嗎? – Ikaso 2012-10-23 09:51:10

回答

0

當我們看不到ItemTasks.Save在封面上所做的事情時,很難說出什麼是錯誤的。你在交易中包裝你的保存嗎?如果不是,你應該是。

+0

是的definetaly。我正在使用NCommon。 ItemTasks.Save調用在NCommon中保存IRepository <>的方法。 – Murat 2010-10-15 17:44:32

0

你應該在transaction.Commit()之前調用Session.Flush()。