使用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)。
问题出在哪里?为什么它不把它添加到关系表?
答案 0 :(得分:0)
当我们无法看到你的ItemTasks.Save
所做的事情时,很难说出真正的错误。您是否将保存包装在交易中?如果没有,你应该是。
答案 1 :(得分:0)
您应该在transaction.Commit()之前调用Session.Flush()。
答案 2 :(得分:0)
我不确定问题是否已解决,但看起来与我的问题类似(fluentnhibernate hasmanytomany same identifier exception)。
此外,您的父键和子键列似乎是向后的。