views:

25

answers:

1

Using fluentnhibernate i am having a problem with the link table insertion.

Here is my entities

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

Here is my mappings.

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

Here is how i add it to collection in my mvc page

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

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

My question is why it doesnt add the relations in my link table "CategoriesToItems". The table is already in the database with Category_Id (FK, int, not null) and Item_Id (FK, int, not null).

Where is the problem? why it doesnt add it to relation table?

A: 

It's hard to say what's really wrong when we can't see what your ItemTasks.Save does under the covers. Are you wrapping your save in a transaction? If not, you should be.

James Gregory
Yes definetaly. I am using NCommon for that. ItemTasks.Save calls Save method of IRepository<> in NCommon.
Murat

related questions