FluentNhibernate HasManytoMany Relation - 它不会添加到链接表中

时间:2010-10-13 19:53:37

标签: fluent-nhibernate

使用fluentnhibernate我遇到链接表插入问题。

这是我的实体

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)。

问题出在哪里?为什么它不把它添加到关系表?

3 个答案:

答案 0 :(得分:0)

当我们无法看到你的ItemTasks.Save所做的事情时,很难说出真正的错误。您是否将保存包装在交易中?如果没有,你应该是。

答案 1 :(得分:0)

您应该在transaction.Commit()之前调用Session.Flush()。

答案 2 :(得分:0)

我不确定问题是否已解决,但看起来与我的问题类似(fluentnhibernate hasmanytomany same identifier exception)。

此外,您的父键和子键列似乎是向后的。

相关问题