我用Fluent nhibernate创建了一个自引用类别表[MsSQL 2012],在测试期间,我刚刚通过SSMS手动添加数据; “但现在我希望通过代码来实现,我有点迷失了?”
public class CategoryMap : ClassMap<CategoryPartRecord> {
public CategoryMap() {
Table("Ceck_CategoryPartRecord");
Id(x => x.Id).GeneratedBy.Native();
Map(x => x.Name);
//Relationships-
// Recursive:
// [Category]---<[Category]
References(x => x.ParentCategory)
HasMany(x => x.Categories)
.Inverse()
.Cascade.All();
}
}
我尝试了两种方法:
using (var transactionB = session.BeginTransaction())
{
CategoryPartRecord Cat1 = new CategoryPartRecord() { Name = "Exterior" };
CategoryPartRecord Cat2 = new CategoryPartRecord() { Name = "Interior" };
CategoryPartRecord Cat3 = new CategoryPartRecord() { Name = "Garden" };
CategoryPartRecord Cat4 = new CategoryPartRecord() { Name = "Paint" };
Cat1.Categories.Add(Cat4);
session.Save(Cat1);
session.Save(Cat2);
session.Save(Cat3);
transactionB.Commit();
}
using (var transactionBB = session.BeginTransaction())
{
var Cat = session.Load<CategoryPartRecord>(1); //Contains "Exterior"
CategoryPartRecord Cat2 = new CategoryPartRecord() { Name = "Paint" };
Cat.Categories.Add(Cat2);
session.Save(Cat);
transactionBB.Commit();
}
两者都添加包含“Paint”的新记录,但是没有正确链接关系,因为“CategoryPartRecord_id”总是为NULL - 我错过了一些非常明显的东西,因为它们都不起作用?
答案 0 :(得分:1)
嗯,冒险猜测反转递归会更有趣,所以为了消除任何有趣的行为,改变你的映射,让我知道你是如何进行的?
References(x => x.ParentCategory).Cascade.SaveUpdate();
HasMany(x => x.Categories)
.Cascade.SaveUpdate();