流利的NHibernate许多人不节约

Jos*_*amm 3 fluent-nhibernate automapping

我在使用Fluent NHibernate中的Automapper在NHibernate中保存连接记录时遇到了多个问题.

关于这一点还有不少其他帖子,但到目前为止,他们都没有解决问题,想知道我是否正在做一些与众不同的事情.

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

这是相关的映射.我使用默认约定的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())
                            );
                    })
Run Code Online (Sandbox Code Playgroud)

我的实际保存看起来像这样.它可能是矫枉过正,因为我明确地保存邮政编码和vpa,但我读了很多关于人们在映射中有反向线问题的人,所以我想尝试两者.它没用.

var postalCode = new PostalCode {Value ="90210", CreatedBy = 0, CreationDate = DateTime.Now, ModifiedBy = 0, ModifiedDate = DateTime.Now};
vpa.PostalCodes.Add(postalCode);
postalCode.VPAs.Add(vpa);
PostalCodeService.Save(postalCode);
VPAService.Save(vpa);
Run Code Online (Sandbox Code Playgroud)

在封面下,service.save调用了

return (int)Session.Save(obj);
Run Code Online (Sandbox Code Playgroud)

有谁看过这个,知道为什么它不会保存连接记录?

Jos*_*amm 5

找出解决方案,想要更新,以防任何人遇到同样的问题.

您必须在事务中包装save调用,否则它不会提交连接记录.我最终修改了要读取的服务代码

using (var tx = Session.BeginTransaction()) {
    Session.Save(obj)
    tx.commit();
    return obj.Id;
}
Run Code Online (Sandbox Code Playgroud)