Fluent nhibernate 流利的NHibernate多对多不储蓄

Fluent nhibernate 流利的NHibernate多对多不储蓄,fluent-nhibernate,automapping,Fluent Nhibernate,Automapping,我在使用Fluent NHibernate中的Automapper获取多对多关系以保存NHibernate中的加入记录时遇到问题 关于这一点,在S.O上还有很多其他的帖子,但到目前为止,没有一篇能够解决这个问题,我想知道我是否在做一些不同的事情 我有要映射的应用程序设置,当我在DB中手动创建连接记录时,我会返回数据,因此在读取级别上,它映射正确,但不会保持关系 这是相关的映射。我曾使用带有默认约定的automapper,但最终基于另一篇SO帖子尝试了这一点 .Mappings(m => {

我在使用Fluent NHibernate中的Automapper获取多对多关系以保存NHibernate中的加入记录时遇到问题

关于这一点,在S.O上还有很多其他的帖子,但到目前为止,没有一篇能够解决这个问题,我想知道我是否在做一些不同的事情

我有要映射的应用程序设置,当我在DB中手动创建连接记录时,我会返回数据,因此在读取级别上,它映射正确,但不会保持关系

这是相关的映射。我曾使用带有默认约定的automapper,但最终基于另一篇SO帖子尝试了这一点

.Mappings(m => {
                        m.AutoMappings.Add(AutoMap.AssemblyOf<User>);
                        m.AutoMappings.Add(AutoMap.AssemblyOf<PostalCode>);
                        m.AutoMappings.Add(
                                AutoMap.AssemblyOf<VPA>()
                                    .Override<VPA>(v => 
                                        v.HasManyToMany(x => x.PostalCodes)
                                            .Table("PostalCodesToVPAs")
                                            .ParentKeyColumn("PostalCode_Id")
                                            .ChildKeyColumn("VPA_Id")
                                            .Cascade.SaveUpdate())
                                    .Override<PostalCode>(p => 
                                        p.HasManyToMany(x => x.VPAs)
                                            .Table("PostalCodesToVPAs")
                                            .ParentKeyColumn("VPA_Id")
                                            .ChildKeyColumn("PostalCode_Id")
                                            .Cascade.SaveUpdate().Inverse())
                            );
                    })
在服务的封面下。保存呼叫

return (int)Session.Save(obj);

是否有人看到了这一点,并且知道为什么它不会保存加入记录?

找到了解决方案,希望在有人遇到相同问题时进行更新

您必须在事务中包装save调用,否则它不会提交join记录。我最终修改了服务代码,改为

using (var tx = Session.BeginTransaction()) {
    Session.Save(obj)
    tx.commit();
    return obj.Id;
}
using (var tx = Session.BeginTransaction()) {
    Session.Save(obj)
    tx.commit();
    return obj.Id;
}